我正在尝试“暂停”正在运行的java进程。所以我继续运行推荐的:
sudo kill -SIGSTOP <pid_of_java_proc>
但是,如果我对其运行 strace:
sudo strace -F -p <pid_of_java_proc> 2>&1
我看到这样的事情:
[pid <someotherpid>] sendto(34, "a string...
[pid <yetotherpid>] sendto(34, "different string...
据此我推测实际上有孩子不知何故仍然“没有冻结”的进程。
我错过了什么吗?有没有一种简单的方法可以阻止父 PID“及其所有子进程”?我似乎无法让 (someotherpid, Yetotherpid) 显示在 ps 报告中来枚举它们。
答案1
你有没有尝试过:
sudo kill -SIGSTOP $PID `ps -o pid= --ppid $PID`
?
这将停止当前进程,然后使用 ps 查找所有直接子进程,并停止它们。它可能不起作用的可能原因包括子级是嵌套的(即子级有子级),或者子级实际上属于某个全局父级(例如 init 系统)。