我们知道, 在linux中, 开启一个shell, 实际上就是开启一个shell进程, 如果在shell中运行一个ls命令, 实际上就是让shell进程拉起了一个ls进程, 且shell进程是父进程, ls进程是子进程。
某次, 我胡思乱想, 既然ls执行的时候对应一个进程, 那么怎么获取ls进程的进程号码呢? 执行一下ls, ls很快执行完毕了, 进程消失了啊。 于是, 我想到执行 ls & 这个命令, 结果如下:
[taoge@localhost Desktop]$ echo $$
2378
[taoge@localhost Desktop]$ ls &
[taoge@localhost Desktop]$ learn_c
然后, 我估计2380这个数字就是ls进程的进程号码, 但是, 我要验证这个问题啊, 光估计有个屁用? 于是, 我开启了另外一个shell, 跑到/proc/中一看, 发现没有2380这个进程(目录), 看来2380这个进程实际上是执行完毕了的。
于是, 我想, 要搞一个执行时间长一点(不能太短)的命令, 比如可以考虑find命令, 如下:
[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 &
[taoge@localhost Desktop]$ learn_c