首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

进程组、会话、终端概念深入理解守护进程

/hello 后台进程,例如这样:$ ./hello & 释放对控制终端占用 2、进程组 每个进程都会属于一个进程组,进程可以包含一个或多个进程。...3、会话(session) 多个进程组构成一个「会话」,建立会话进程是会话领导进程,该进程 ID 为会话 SID。会话每个进程组称为一个「作业」。...5、设置文件权限掩码 文件权限掩码是指屏蔽掉文件权限对应位。由于使用 fork()函数新建进程继承了父进程文件权限掩码,这就给该子进程使用文件带来了诸多麻烦。...此时守护进程终端脱离,常说输入、输出、错误描述符也应该关闭。 守护进程出错处理 由于守护进程脱离了终端,不能将错误信息输出到控制终端,即使 gdb 也无法正常调试。...常用方法是使用 syslog 服务,将错误信息输入到/var/log/messages。 syslog 是 Linux 系统日志管理服务,通过守护进程 syslogd 来维护。

97620
您找到你想要的搜索结果了吗?
是的
没有找到

如何读取Linux进程代码段和数据段

Linux下程序文件格式是ELF,里面分了各种段,有代码段、数据段、等。当运行这个程序时,系统也会给这个进程创建虚拟内存,然后把ELF数据分别加载到内存对应位置。...本文整理了用cpp程序读取内存代码段和rodata数据段方法。.../proc/pid/mem mem是内核创建虚拟文件,是Linux”一切皆文件”在进程体现,但是这个文件无法直接进行读取,需要先利用ptrace进行绑定操作。...用ptrace绑定之后就可以用read来读取这个“文件”了,但是要注意输入读取地址不对,也读不出数据来。...用程序读取内存代码段和rodata数据段 以tcpdump程序为例,用程序读取代码段和radata过程如下: 1.查看tcpdump进程ID。

3.5K20

如何在父进程读取子(外部)进程标准输出和标准错误输出结果

最近接手一个小项目,要求使用谷歌aapt.exe获取apk软件包信息。依稀记得去年年中时,有个同事也问过我如何获取被调用进程输出结果,当时还研究了一番,只是没有做整理。...这个问题,微软以为为我们考虑过了,我们可以从一个API可以找到一些端倪——CreateProcess。...这个API参数非常多,我想我们工程对CreateProcess调用可能就关注于程序路径(lpApplicationName),或者命令行(lpCommandLine)。...它是我们启动子进程时,控制子进程启动方式参数。...我们之后将hWrite交给我们创建进程,让它去将信息写入管道。而我们父进程,则使用hRead去读取进程写入管道内容。

3.7K10

.NETC# 在 64 位进程读取 32 位进程重定向后注册表

---- Wow6432Node 对于 32 位程序,读取注册表路径时候,会读到 Wow6432Node 节点下项: 这张图读取就是前面截图中节点。...如何在 64 位程序读取 32 位注册表路径 前面我们例子代码是这样: 1 var value = RegistryHive.LocalMachine.Read(@"SOFTWARE\Walterlv..."); 可以看到,相同代码,在 32 位和 64 位进程下得到结果是不同: 32 位进程在 32 位系统上,64 位进程在 64 位系统上,读取路径会是传入路径; 32 位进程在 64 位系统上...那么如何在 64 位进程读取 32 位注册表路径呢? 方法是在打开注册表项时候,传入 RegistryView.Registry32。...1 RegistryKey.OpenBaseKey(root, RegistryView.Registry32); Walterlv.Win32 可以在我 GitHub 仓库查看完整实现。

23530

python subprocess运行进程实时获取输出

起因是这样,c++程序开发后 功能号和指令,校验需要人工去看对照二进制代码,量大还费力, 于是打算利用python 去调用 c++程序去校验指令, 首先要做就是用python 获取c++程序...printf() 或cout 输出; 环境linux python 3.8.x 以下代码实现,获取子程序输出 command='....linux shell指令,如果要用shell 指令如ls 要将false 变成true, 通过指定stderr=subprocess.STDOUT,将子程序标准错误输出重定向到了标准输出,以使我们可以直接标准输出同时获取标准输出和标准错误信息...p.poll() 返回子进程返回值,如果为None 表示 c++子进程还未结束. p.stdout.readline() c++标准输出里获取一行....参考文章1 pythonsubprocess.Popen()使用 参考文章 2 python subprocess运行进程实时获取输出

10K10

实用:如何将aoppointcut值配置文件读取

背景 改造老项目,须要加一个aop来拦截所web Controller请求做一些处理,由于老项目比较多,且包命名也不统一,又不想每个项目都copy一份相同代码,这样会导致后以后升级很麻烦,不利于维护...于是我们想做成一个统一jar包来给各项目引用,这样每个项目只须要引用该jar,然后配置对应切面值就可以了。...我们都知道,java注解里面的值都是一个常量, 如: @Pointcut("execution(* com.demo.Serviceable+.*(..))")...这种方式原则上是没有办法可以进行改变。但是我们又要实现这将aop切面值做成一个动态配置,每个项目的值都不一样,该怎么办呢?...比如,我们定时器采用注解方式配置时候,cron表达式也是注解里面的一个字符串常量,那么,我们能不能通过配置文件方式来配置这个cron呢?原理都是一样

23.7K41

书中关于终端一个纰漏

先上代码 pty.c pty_fun.c 这是书上标准 pty 程序,简单说起来就是提供一个终端给被调用程序使用,例如 pty prog arg1 arg2 相当于在新终端上执行 prog arg1...运行时 pty 首先通过 fork+exec 产生 slowout 子进程,其中标准输入、输出分别重定向到中间终端设备(pty slave device), 然后它自身又通过 fork 一分为二...,pty 父进程负责读取标准输入,将内容导入到终端主设备(pty main device),也就是 slowout 输入; pty 子进程负责终端主设备(pty main device) 读取数据...当 slowout 结束时,子进程终端主设备时返回 0,它知道工作进程结束后,也即将结束自己工作, 但是父进程一直卡在读终端输入上,并不知道工作进程已经退出,于是 pty 子进程向父进程发送一个...这样一来,当 slowout 尝试读取时,将从终端设备读取,而这个并不会返回 eof,而是期待 pty 父进程终端输入导向这里。

41820

支持多用户web终端实现及安全保障(nodejs)

设备输出信息也通过管道发送给主设备,这样可以在终端设备执行shell,完成终端功能。...终端设备,可以真实模拟终端tab补全和其他shell特殊命令,因此在node原生模块不能满足需求前提下,我们需要把目光放到底层,看看OS提供了什么功能。...终端实现思路 根据终端主从设备特性,我们在主设备所在进程管理终端生命周期及其资源,在从设备所在进程执行shell,执行过程信息及结果通过双向管道传输给主设备,由主设备所在进程向外提供...在node层通过net.Socket(fd)创建一个套接字实现数据流双向IO,终端设备也有着主设备相同输入,从而在子进程执行对应命令,子进程输出也会通PIPE反应在主设备,进而触发...因此子进程输入输出都是与设备fd相关联,子进程输出数据走是PIPE,并从PIPE读入父进程命令。

1.6K50

理解Linux 终端终端模拟器和终端

在 gnome-terminal 执行 tty 命令,可以看到代表PTY slave设备文件: $ tty /dev/pts/0 执行 ps -l 命令,也可以确认 shell 关联终端是 pts...当你按下回车键时,TTY 驱动负责将缓冲数据复制到PTY slave bash 标准输入读取输入字符(例如 ls -l )。...注意,bash 在启动时已经将标准输入被设置为了PTY slave bash 解释输入读取字符,发现需要运行 ls bash fork 出 ls 进程。...gnome-terminal 循环 PTY master 读取字节,绘制到用户界面上。...电传打字机(TTY)现在被运行在内核模块所模拟,被称为终端模拟器(terminal emulator)。 终端(pseudo terminal, PTY) 是运行在用户区终端模拟程序。

30610

Linux 信号

操作系统会中断目标程序进程来向其发送信号、在任何非原子指令,执行都可以中断,如果进程已经注册了信号处理程序,那么就执行进程,如果没有注册,将采用默认处理方式。...当实际时间或时钟时间超时时,发送 SIGALRM。 当进程使用 CPU 时间超时时,将发送 SIGVTALRM。 当进程和系统代表进程使用CPU 时间超时时,将发送 SIGPROF。...该信号一个重要用途是在 Unix shell 作业控制。 SIGFPE SIGFPE 信号在执行错误算术运算(例如除以零)时将被发送到进程。...SIGTTIN 和 SIGTTOU 当 SIGTTIN 和SIGTTOU 信号分别在后台尝试 tty 读取或写入时,信号将发送到该进程。...此外,对于与终端脱离关系守护进程,这个信号用于通知它重新读取配置文件。

4.7K20

proc文件系统

proc是一个文件系统,文件系统定义: 它只存在内存当中,而不占用外存空间。它以文件系统方式为访问系统内核数据操作提供接口。...由于系统信息,如进程,是动态改变,所以用户或应用程序读取proc文件时,proc文件系统是动态系统内核读出所需信息并提交。...,而proc/xxx就是相应进程号:在终端下开启gedit 不要后台运行。。.../self 链接到当前正在运行进程 2、在根目录命名文件: /proc/buddyinfo 每个内存区每个order有多少块可用,和内存碎片问题有关 /proc/cmdline 启动时传递给kernel...echo命令来写这个文件时候,远程root用户可以执行大多数系统请求关键命令,就好像在本地终端执行一样。

2.6K70

Caché 变量大全 $KEY 变量

可以使用ZZDUMP命令显示$KEY值。 在终端会话期间,每个命令行结尾都记录在$key作为回车符(十六进制0D)。此外,$KEY特殊变量由初始化终端会话进程初始化为回车符。...因此,要在终端会话期间显示由READ命令或SET命令设置$KEY值,必须将$KEY值复制到同一行代码局部变量。 示例 在下面的示例,可变长度读取命令要么终端接收数据,要么在10秒后超时。...DHC-APP>READ "Ready or Not: ",x:10 Ready or Not: 10 DHC-APP> ZZDUMP $KEY 0000: 0D 在下面的示例,固定长度读取命令要么终端接收数据...如果用户输入指定数量字符(在本例为一个字符),则用户不必按即可结束读取操作。用户可以通过按来响应读取提示,而不是输入指定字符数。...$KEY不支持基于块读写操作,如磁带I/O。 命令行上$KEY 终端命令行交互发出命令时,按可发出每个命令行。$KEY和$ZB特殊变量记录此命令行终止符。

34530

记录 FTPClient 超时处理相关问题问题源码跟进结论常见异常

因为本地文件要上传到服务器,首先,需要先读取本地文件内容,然后写入到传输数据 Socket 输出流,这个过程不可能是一次性完成,肯定是每次读取一些、写一些,默认每次是读取 1KB,可配置。...第二点,SoTimeout 只针对 Socket 输入流读取数据操作。...什么意思,如果是终端下载 FTP 服务器文件,那么服务端会往终端 Socket 输入流写数据,如果终端接收到了这些数据,那么 FTPClient 就可以去这个 Socket 输入流读取数据写入到本地文件输出流...总之,setSoTimeout() 用于设置 Socket 输入流读取数据时每次陷入阻塞过程超时时间。...另外,使用 setDataTimeout() 时需要注意,这个超时不是指下载文件整个过程超时处理,而是仅针对终端 Socket 输入流,每一次可进行读取操作之前陷入阻塞超时

2.5K20

Docker入门(六):操作容器

# 运行容器里 bash 命令 $ docker run -it ubuntu:14.04 /bin/bash root@af8bae53bdd3:/#-t: 为容器重新分配一个输入终端端(pseudo-tty...:检查本地是否存在指定镜像,不存在就从公有仓库下载利用镜像创建并启动一个容器分配一个文件系统,并在只读镜像层外面挂载一层可读写层宿主主机配置网桥接口中桥接一个虚拟接口到容器中去地址池配置一个...容器核心为所执行应用程序,所需要资源都是应用程序运行所必需。除此之外,并没有其它资源。可以在终端利用 ps 或 top来查看进程信息。...c后字符串读取。...例如对于上一章节只启动了一个终端容器,用户通过 exit命令或 Ctrl+d 来退出终端 时,所创建容器立刻终止。终止状态容器可以用 docker container ls -a 命令看到。

51030
领券