1
A
回答
1
您可以轻松地识别子进程,例如,使用像pstree
工具(这是使人类可读的输出非标准程序)。
~ $ pstree -ps "$PPID"
init(1)───tmux(9707)─┬─bash(9708)─┬─bash(9742)───trayer(9743)
│ └─weechat-curses(10594)
├─bash(10729)───su(10746)───bash(10752)───vim(10761)
├─bash(10818)───ksh(1748)
├─bash(15133)───pstree(15474)
├─bash(17879)───man(15076)───sh(15079)───sh(15080)───vimmanpager(15084)───vim(15088)
├─bash(17900)───su(17917)───bash(17922)
├─bash(20076)───man(20095)───sh(20098)───sh(20099)───vimmanpager(20103)───vim(20109)
├─bash(20116)───man(20135)───sh(20138)───sh(20139)───vimmanpager(20143)───vim(20147)
└─tmux-mem-cpu-lo(15472)
如果需要的原始数据,至少在Linux下,你可以通过/proc/<pid>/stat
递归爬行。您也可以使用ps
,但解析其输出并不是我喜欢做的事情。
但是你的问题是“你能识别由shell创建的所有进程吗?”。技术上,不。如果您使用disown
或使用nohup
运行,并且尤其是在父进程死亡的情况下,则子进程可能成为init
的子进程,并且与另一个进程分叉的进程无法区分。
这种情况下的解决方案是特定于平台的。如果你已经在内核中建立了支持,你可以在Linux下使用cgroups。我相信BSD的等价物被称为“监狱”。
此外,如果您尝试将跟踪进程作为脚本的一部分,而不是开发和测试以外的原因,则应该使用正确的process management。不应该在脚本中使用ps
。
相关问题
- 1. 执行上./不SH
- 2. 创建.sh文件来执行visual studio 2010项目
- 3. fork()创建的进程不会并行执行
- 4. Heroku创建了十几个sh和ruby进程
- 5. 确定执行用户的NT组的Java进程
- 6. iPhone:创建另一个线程并执行一些进程
- 7. 如何创建罐并执行正确
- 8. PHP执行SH文件
- 9. phantomjs PHP执行sh文件
- 10. 无法执行./sh文件
- 11. 确定Java程序的确定性线程执行
- 12. 创建一个在C#中执行powershell但失败的进程
- 13. 创建一个新的进程来执行ls命令
- 14. 动态创建按钮确定但它的事件处理程序不执行?
- 15. 确定映射程序的执行
- 16. SH -c和进程替换
- 17. Xcode 4:自定义行为不执行我的sh脚本?
- 18. 创建Sh和Bin文件以执行文件夹中的所有SQL脚本
- 19. 确定文件是否表示可执行进程
- 20. 在当前jar中创建java进程来执行类
- 21. C#Windows服务创建进程,但不执行它
- 22. 如何用C++创建一个进程来执行exe?
- 23. 确定哪个进程在Windows中创建共享内存
- 24. 线程创建(分离)从未执行
- 25. 创建延迟执行程序
- 26. 创建可执行的JAR
- 27. 在特定目录中执行进程
- 28. Cron执行一个执行python脚本的sh脚本
- 29. 使用多处理进程()进行并行执行的正确方法
- 30. 创建非创建子进程的进程
on unix(SunOS)你可以使用ptree – 2012-07-26 07:30:21
你的脚本在做什么?如果它没有长时间运行或在后台运行,那么你不能在ps命令输出中看到它们,因为它只会运行并退出进程。 – Satish 2012-08-23 20:43:36