shell查看进程命令(shell子进程)

shell和进程的关系:先从登录shell说起。登录shell用于表示登录过程,指用户刚登录系统时,系统创建的运行shell的过程。这里,首先运行几个命令:
打印登录过程的ID(在登录退出之前一直存在)
George . Guo @ ls : ~ $ echo $ ppid 3411 George . Guo @ ls 3360 ~ $ PS-aux | grep 3411 George . 3411 0.0 0.0 99004 4520s s 11336000 0336000 shell 3360 George . Guo @ pts/4360
George . Guo @ ls : ~ $ echo $ $ 3412 George . Guo @ ls 3360 ~ $ PS-aux | grep 3412 George . 3412 0.5 0.0 21380 5120 pts/46ss 1:00 0336000-bash从以上命令可以看出:
登录进程ID是3411,它创建了bash shell子进程3412。在脚本执行之后,
312我们这里称之为主shell,它会提升shell进程处理脚本。
(注意:在bash中,子shell进程的PID存储在一个特殊的变量’ $ $ ‘中,PPID存储子shell的父进程的ID。)
我们来写两个小程序验证一下:
george.guo@ls:~$ cat yes.c
# include # include # include # include int main(){ PID _ t PID;pid _ t ppidPID=getpid();ppid=getppid();系统(\ ‘。/test \ ‘);//系统将为exec派生一个进程。/testprintf(\’yes pid=%d,yes ppid=%d\n\ ‘,pid,ppid);}george.guo@ls:~$猫测
#!/bin/bashecho \ ‘此脚本的: $ \ ‘ echo \ ‘ test的ppid(系统的fork id)=$ ppid \’ echo \’ tests的PID=$ $ \ ‘运行结果如下:
george.guo@ls~$。/是的
这个脚本的PID 3360 6082测试ppID(系统的fork id)=6081回显测试自身PID为6082是PID=6080,是ppid=3412。可以看到yes进程的父进程ID是3412,也就是登录进程fork的bash shell子进程,主shell。这是因为
Yes由主shell执行。是的,进程ID是6080,调用system时fork shell ID是6081。
对于系统调用:
使用system()运行命令需要创建至少两个进程。一个用于运行shell(这里它的ID是6081),
另一个或多个用于shell(这里是子shell,脚本测试本身)执行的命令。
脚本本身的进程ID是6082。

其他教程

甲乙双方,“拉锯战”需求对接?

2022-9-4 1:44:41

其他教程

电脑好用免费的剪辑工具(pc电脑剪辑软件)

2022-9-4 1:46:51

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索