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. 无法执行./sh文件
- 5. phantomjs PHP执行sh文件
- 6. iPhone:创建另一个线程并执行一些进程
- 7. 确定Java程序的确定性线程执行
- 8. 动态创建按钮确定但它的事件处理程序不执行?
- 9. 确定映射程序的执行
- 10. SH -c和进程替换
- 11. 确定文件是否表示可执行进程
- 12. 如何用C++创建一个进程来执行exe?
- 13. 在特定目录中执行进程
- 14. 使用多处理进程()进行并行执行的正确方法
- 15. 如何在FreeBSD的命令行中获取java进程的进程ID,sh
- 16. 创建非创建子进程的进程
- 17. 从已经运行的进程中创建子进程对象
- 18. 执行多线程进程
- 19. 远程进程执行
- 20. 如何创建自定义执行程序类?
- 21. 在没有创建新进程的情况下在另一个进程中运行可执行文件
- 22. Cronjob执行.sh,出现错误
- 23. 如何在cron中执行.sh文件?
- 24. 使用Osx执行GUI .sh文件
- 25. 确定进程是否正在运行?
- 26. 创建pypy进程
- 27. 创建子进程
- 28. 创建自定义Ubuntu守护进程
- 29. 准确确定程序中的执行次数
- 30. 从JavaScript创建的按钮执行功能的正确方法?
on unix(SunOS)你可以使用ptree – 2012-07-26 07:30:21
你的脚本在做什么?如果它没有长时间运行或在后台运行,那么你不能在ps命令输出中看到它们,因为它只会运行并退出进程。 – Satish 2012-08-23 20:43:36