如何解决Bash:从另一个脚本中查找脚本的父进程 ID 并执行一些操作
我有一个脚本workingScript.sh。我有另一个名为monitorscript.sh的脚本,我想用它来监控workingScript.sh的processid活动。
我想确保如果除了从 17506(workingScript.sh 的父进程)生成的进程 ID 之外创建了任何 wc/cat 进程 ID,它应该被 monitorscript.sh 杀死
ps aux|grep "workingScript*"
svc.test+ 25896 0.0 0.0 112812 984 pts/3 S+ 01:15 0:00 grep --color=auto workingScript*
svc.test+ 17506 0.0 0.0 113288 1072 ? S Mar18 0:00 sh workingScript.sh
svc.test+ 17510 0.0 0.0 113412 868 ? S Mar18 0:03 sh workingScript.sh
workingScript.sh 父进程 id 的进程树如下所示。
pstree -p 17506
sh(17506)─┬─cat(17509)
└─sh(17510)─wc(17569)
所以在任何时候,如果任何 wc/cat 进程 id 除了由workingScript.sh 创建的进程 id 启动(在本例中为 17509/17569 根据上述进程树),它应该被杀死
我们可以使用PPID来获取相同脚本的进程ID,但是我们如何获取不同脚本的不同脚本和相关子进程的不同脚本
有人可以帮我吗?
解决方法
运行 workingScript.sh
和 LD_PRELOAD
并覆盖 exec*()
调用。然后在这些 exec*()
调用中检查命令是否解析为 wc
或 cat
可执行文件。如果是的话,raise
如果你想要一些杀戮信号。请记住导出 LD_PRELOAD
,以便子进程 exec*()
也被覆盖。
如果您希望定期检查进程的脚本,那么只需找到 pid 并杀死它们:
pid=$(pgrep workingScript.sh)
while sleep "$polling_period"; then
# ex. killing cat
pkill -P "$pid" cat
fi
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。