节点或shell脚本中有没有办法知道子进程是不是启动了自己的子进程?
Posted
技术标签:
【中文标题】节点或shell脚本中有没有办法知道子进程是不是启动了自己的子进程?【英文标题】:Is there a way in node or shell-scripting to know if a child process starts its own subprocess?节点或shell脚本中有没有办法知道子进程是否启动了自己的子进程? 【发布时间】:2019-05-18 03:15:29 【问题描述】:假设我有一个简单的 1 行 shell 脚本 test.sh
可以启动其他进程,例如 npm start
或 python server.py
。
现在说我从父节点程序中运行该 shell 脚本,即:
let child = process.spawn("./test.sh");
节点进程是否有任何方法可以跟踪由该 shell 脚本启动的进程?假设我想获取 python 或 npm 进程的pid
并监控其生命周期。
了解 shell 脚本是否有办法执行此操作同样有用,因为我可以编写一个 shell 脚本来运行另一个 shell 脚本,然后让我的节点项目将我的 shell 脚本作为 man-in- 运行the-middle....所以如果 shell 或 node 可以做到,任何一种方式都可以。
有可能吗?
【问题讨论】:
另见:communication between multiple processes 【参考方案1】:您可以在 python 中使用类似的方法列出进程的所有子进程,并提供父进程的 PID 作为第一个参数
#! /usr/bin/env python
import sys
import psutil
for child in psutil.Process(int(sys.argv[1])).children(recursive=True):
print(child.pid)
【讨论】:
【参考方案2】:在 Linux 上,您可以strace
目标进程并查找fork
系统调用。
在大多数其他平台上可能也可以使用类似的技术,但细节会有所不同。在某些平台上,您需要root
或同等权限才能检查进程的内部结构,即使它属于您自己。
【讨论】:
以上是关于节点或shell脚本中有没有办法知道子进程是不是启动了自己的子进程?的主要内容,如果未能解决你的问题,请参考以下文章
将window的shell脚本通过ftp传输到Linux服务器后, shell脚本中执行时提示“没有那个文件或目录”的解决办法