linux - 如何查找/杀死特定的 python 程序

标签 linux bash ps grep

这个虚拟机中运行着两个不同的python程序

一个是监控文件夹然后“做事”的后台工作(有几个 worker )

10835 ?        Sl     0:03 python main.py
10844 ?        Sl    34:02 python main.py
10845 ?        S     33:43 python main.py

第二个是通过脚本启动的

20056 pts/1    S+     0:00 /bin/bash ./exp.sh
20069 pts/1    S+     0:00 /bin/bash ./exp.sh
20087 pts/1    S+     0:10 python /home/path/second.py

我已经尝试了很多方法来找到一种只杀死主程序的方法(我想构建一个 cron 看门狗),但没有成功

第一个我只想找到挂起的“python main.py”进程(伴随着[defunct]),但我什至不能单独找到这个进程。

上面的来自 ps -ax(所以它们目前都在运行) pgrep 'python' 返回所有 PID,也来 self 不想要的 second.py:(没有用,因此 pkill 也是如此)

pgrep 'python'
10835
10844
10845
20087

pgrep 'python main.py' 总是返回空,pgrep 'main.py 也是如此;

唯一有效的方法

ps ax | grep 'python main.py'

但是这个也返回它自己的 PID,grepping 'ps' 不是一个公平的首选解决方案。当 main.py 挂起时,它显示“python main.py [defunct]”。一个

ps ax | grep 'python main.py [defunct]'

作为测试是无用的,因为它总是返回 true。除了'python'之外的任何东西的 pgrep 也总是返回 false。我有点不知所措。

最佳答案

这对我有用。在 pgrep 上找到它 bro pages .

查找以“test.py”为参数的进程的 pids,例如“python test.py”

pgrep -f test.py

我用它来检查 python 进程是否正在运行:

searcher="backend/webapi.py"

if pgrep -f "$searcher" > /dev/null
then
    echo "$(date +%y-%m-%d-%H-%M-%S) $searcher is alive. Doing nothing."
else
    echo "No $searcher. Kickstarting..."
    pushd $HOME/there/;
    ./run_backend
    popd;
    echo "Pgrepping $searcher:"
    pgrep "$searcher" # out to loggers
fi

关于linux - 如何查找/杀死特定的 python 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16798111/

相关文章:

linux - 如何在登录后将 SSH 用户限制为一组预定义的命令?

如果后跟管道,Linux tee 命令有时会失败

windows - dmake 中的 shell 命令添加 '/S'

Bash while循环逐行读取文件

c - 重新养育停止的过程

php exec ('ps -aeo' ) 不返回所有进程

c++ - 我可以在Linux中检测箭头键作为信号吗?

windows - 在 Windows 上开发 Linux 软件

android - 在 Linux 上为 Qt Creator 安装没有 Studio 的 Android SDK

linux - 如何获取特定进程的进程ID?