您的位置:首页 > 运维架构 > Shell

如何获取linux shell中ls进程的进程号?---有趣的问题!

2015-04-25 21:13 246 查看
        我们知道, 在linux中, 开启一个shell, 实际上就是开启一个shell进程, 如果在shell中运行一个ls命令, 实际上就是让shell进程拉起了一个ls进程, 且shell进程是父进程, ls进程是子进程。

        某次, 我胡思乱想, 既然ls执行的时候对应一个进程, 那么怎么获取ls进程的进程号码呢? 执行一下ls, ls很快执行完毕了, 进程消失了啊。 于是, 我想到执行 ls & 这个命令, 结果如下:

 [taoge@localhost Desktop]$ echo $$

2378

[taoge@localhost Desktop]$ ls &

[1] 2380

[taoge@localhost Desktop]$ learn_c 

        然后, 我估计2380这个数字就是ls进程的进程号码, 但是, 我要验证这个问题啊, 光估计有个屁用? 于是, 我开启了另外一个shell, 跑到/proc/中一看, 发现没有2380这个进程(目录), 看来2380这个进程实际上是执行完毕了的。

      

       于是, 我想, 要搞一个执行时间长一点(不能太短)的命令, 比如可以考虑find命令, 如下:

[taoge@localhost Desktop]$ find -name xxx &

[1] 2390

       然后可以猜测find进程的进程号码就是2390, 我们可以验证一下: 赶快开启另外一个shell, 然后进入/proc/2390/目录, 然后执行cat status,  此时, 就可以看到当前进程的进程号码是2390,  且其父进程的进程号是2378, 这个刚好就是第一个shell的进程号码, 正是这个shell进程拉起了它执行的命令对应的find进程。(千万要注意, 如果find执行的时间太短, 那么在/proc/中, 根本就不会有2390这个目录(对应一个进程)。 事实上, 当find执行完毕后,
在我们之前进入的/proc/2390/中, 根本就没法执行cd .. 退到上一目录, 因为这个目录实际上已经不存在了)

       同理, 我们可知, 在如下的操作中:

 [taoge@localhost Desktop]$ echo $$

2378

[taoge@localhost Desktop]$ ls &

[1] 2380

[taoge@localhost Desktop]$ learn_c 

     2378是shell进程的进程号, 2380是ls进程对应的进程号码。 当然, 我们要明白, 每次执行一个ls, 它的进程号都是不同的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: