博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何获取linux shell中ls进程的进程号?---有趣的问题!
阅读量:4141 次
发布时间:2019-05-25

本文共 1068 字,大约阅读时间需要 3 分钟。

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

转载地址:http://gugvi.baihongyu.com/

你可能感兴趣的文章
如何防止sql注入
查看>>
springmvc传值
查看>>
在Eclipse中查看Android源码
查看>>
Android使用webservice客户端实例
查看>>
[转]C语言printf
查看>>
C 语言 学习---获取文本框内容及字符串拼接
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
一篇搞懂Java反射机制
查看>>
Single Number II --出现一次的数(重)
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>