进程关系之shell执行程序
2009-03-07 11:03
302 查看
1. shell执行程序
1.1. 登录shell(Bourne shell)
首先使用不支持作业控制的Bourne shell。
如果我们执行命令:
#ps -o pid,ppid,pgid,sid,comm
# ps -o pid,ppid,pgid,sid,comm &(后台执行)
两种结果都差不多,只是进程ID不一样:
PID | PPID | PGID | SID | COMMAND |
996 | 994 | 996 | 996 | sh |
1820(1822) | 996 | 996 | 996 | ps |
如果我们执行命令:
#ps -o pid,ppid,pgid,sid,comm | cat1
# ps -o pid,ppid,pgid,sid,comm | cat1 &(后台执行)
两种结果都差不多,只是进程ID不一样:
PID | PPID | PGID | SID | COMMAND |
996 | 994 | 996 | 996 | sh |
1826(1828) | 996 | 996 | 996 | cat1 |
1827(1829) | 1826(1828) | 996 | 996 | ps |
如果一个后台进程试图读其控制终端,如下
#cat > temp.txt &
在有作业控制时,后台作业被放在后台进程组,如果后台作业试图读控制终端,则会产生信号SIGTTIN。在没有作业控制时,处理方法是:如果该进程自己没有重定向标准输入,则shell自动将后台进程的标准输入重定向到/dev/null。读/dev/null则产生一个文件结束。这就意味着后台cat进程立即读到文件尾,并正常结束。
如果我们执行命令:
#ps -o pid,ppid,pgid,sid,comm | cat1 | cat2
结果如下:
PID | PPID | PGID | SID | COMMAND |
996 | 994 | 996 | 996 | sh |
1886 | 996 | 996 | 996 | cat2 |
1887 | 1886 | 996 | 996 | ps |
1888 | 1886 | 996 | 996 | cat1 |
1.2. Bourne-again shell
Bourne-aggain shell支持作业控制。
如果我们执行命令:
#ps -o pid,ppid,pgid,session,tpgid,comm
PID | PPID | PGID | SESS | TPGID | COMMAND |
1996 | 1896 | 1996 | 1996 | 2008 | bash |
2008 | 1996 | 2008 | 1996 | 2008 | ps |
如果我们执行命令:
#ps -o pid,ppid,pgid,session,tpgid,comm &
PID | PPID | PGID | SESS | TPGID | COMMAND |
1996 | 1896 | 1996 | 1996 | 1996 | bash |
2008 | 1996 | 2008 | 1996 | 1996 | ps |
如果我们执行命令:
#ps -o pid,ppid,pgid,session,tpgid,comm | cat1
PID | PPID | PGID | SESS | TPGID | COMMAND |
1996 | 1896 | 1996 | 1996 | 2008 | bash |
2008 | 1996 | 2008 | 1996 | 2008 | ps |
2009 | 1996 | 2008 | 1996 | 2008 | cat1 |
如果我们执行命令:
#ps -o pid,ppid,pgid,session,tpgid,comm | cat1 &
PID | PPID | PGID | SESS | TPGID | COMMAND |
1996 | 1896 | 1996 | 1996 | 1996 | bash |
2008 | 1996 | 2008 | 1996 | 1996 | ps |
2009 | 1996 | 2008 | 1996 | 1996 | cat1 |
从表中可以看出,两个进程ps和cat1都在一个新进程组中(2008),这是一个后台进程组。
相关文章推荐
- 通过进程检测服务时脚本文件名不要起要检测的服务名字命名 shell程序从上到下执行若定义函数或引用系统函数需先定义 kill -USR2
- 进程虚拟地址空间中的虚拟内存区域(vma)---可执行程序与虚拟地址空间的映射关系
- shell 脚本监控程序是否正在执行, 如果没有执行, 则自动启动该进程
- shell 脚本监控程序是否正在执行, 如果没有执行, 则自动启动该进程
- 使用VC创建进程和执行命令行程序的方法
- linux下C程序插入执行shell脚本
- [Java 09 多线程] 线程是指一个进程在执行过程中可以产生更小的程序单元
- 以Linux的shell程序为入口到Teradata中执行SQL
- 程序、进程与线程的关系(转载)
- 进程的创建与可执行程序的加载
- 进程的创建与可执行程序的加载
- Linux程序中执行shell(程序、脚本)并获得输出结果
- 进程的创建与可执行程序的加载
- 从shell中执行import MySQLdb正确,CGI程序中出错
- 使用Shell脚本查找程序对应的进程ID,并杀死进程
- Linux库文件和Shell可执行程序命令文件搜索路径变量的设置
- 线程,进程,程序,服务,之间的关系和区别
- 【Linux操作系统分析】进程的创建与可执行程序的加载
- 程序、进程和线程的关系
- 从程序到进程:谈谈可执行文件是如何与进程相对应并最终被CPU执行的。