bash 输入的每条命令是一个bash的子进程么

zyx1202 2016-09-14 01:14:47
现在做内核,想要在创建进程的时候获取每个进程名和pid。目前通过task_struct结构体来做,正常启动的应用程序进程名和id都可以得到,但是bash里面的每条命令,进程名都是bash,pid都是bash的pid,怎么能得到每条命令的具体信息呢?
...全文
1016 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangwengx73sina 2016-09-27
  • 打赏
  • 举报
回复
当然,假如你的find运行太快,则可以写一个脚本,如下 for ((i=1; i<=10; i=i+1)) do find / -name '*' done
wangwengx73sina 2016-09-27
  • 打赏
  • 举报
回复
step1 执行一个比较耗时间的命令 例如find / -name '*' step2 从另一个终端来观察 使用ps axjf 结果如下 PPID PID 759 761 pts/0 \_ -bash 761 863 pts/0 \_ find / -name * 很明显 find的pid为863,而ppid为761,也就是bash,可见该命令是一个独立的子进程 至于find是不是bash的内部命令,这个我倒不是很清楚, 不管是不是内部命令,我们看到它的执行方式是开了一个独立的子进程
nswcfd 2016-09-26
  • 打赏
  • 举报
回复
引用 4 楼 zyx1202 的回复:
就是例如 ls 或者 ./xxx之类的。。
那么从task_struct里看到的就是ls或者xxx,而不是bash.
hijack00 2016-09-23
  • 打赏
  • 举报
回复
shell中执行的每行命令是一个子进程,每个shell脚本应该也只是在一个子进程里面运行的吧(不管脚本里面有多少行代码)?当然,如果shell脚本里面有类似var=$(pwd)这种语句,则括号里面的语句也会在一个新的子进程中运行。
zyx1202 2016-09-21
  • 打赏
  • 举报
回复
如果我写一个helloworld 编译 成a.out 然后在bash里面./a.out 这是个子进程么
nswcfd 2016-09-18
  • 打赏
  • 举报
回复
什么叫“bash里面的每条命令”? 在shell里执行的命令,还是在某个bash脚本里执行的命令,还是其它的意思?
nswcfd 2016-09-18
  • 打赏
  • 举报
回复
除了内置命令(built-in,例如cd/read等),都是子进程。
  • 打赏
  • 举报
回复
如果放在bash文件中执行是只有一个进程的
zyx1202 2016-09-18
  • 打赏
  • 举报
回复
引用 3 楼 nswcfd 的回复:
什么叫“bash里面的每条命令”? 在shell里执行的命令,还是在某个bash脚本里执行的命令,还是其它的意思?
就是例如 ls 或者 ./xxx之类的。。

4,437

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧