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

        我们知道, 在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, 它的进程号都是不同的。






评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值