微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bash:从另一个脚本中查找脚本的父进程 ID 并执行一些操作

如何解决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.shLD_PRELOAD 并覆盖 exec*() 调用。然后在这些 exec*() 调用中检查命令是否解析为 wccat 可执行文件。如果是的话,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 举报,一经查实,本站将立刻删除。