如何通过 Putty 终端从批处理文件中以 SUDO SU 的形式执行 kill `ps -ef | grep 1.sh` 命令来杀死所有进程(不仅是第一个进程,还有给定的名称)?

如何通过 Putty 终端从批处理文件中以 SUDO SU 的形式执行 kill `ps -ef | grep 1.sh` 命令来杀死所有进程(不仅是第一个进程,还有给定的名称)?

我尝试使用这个命令:

start "" putty.exe -ssh -load NameOfSessionInPutty -m "C:\Program Files\PuTTY\MYCOMMAND.txt" -t

MYCOMMAND.txt包含:

sudo su - -c "kill `ps -ef | grep 1.sh`" 

但是上述命令只能杀死 1 行(它找到的第一行),而我需要找到并杀死所有具有此名称的进程1.sh

当我手动执行此操作时:

kill `ps -ef | grep 1.sh`

它运行完美,杀死所有具有该名称的进程。

sudo su - -c "kill `ps -ef | grep 1.sh`"仅杀死发现的第一个并关闭会话。

谁知道我需要在代码中更改什么,请帮帮忙。

答案1

不确定为什么要sudo与结合使用su。在我看来,这似乎有点过分,无法获得 root 权限。相反,您可以使用 ...

sudo kill ...

或者

su kill ... -

终止所有名为1.sh你可以结合pgrep(查找所有 PID)和kill(发送信号终端所有这些 PID)。

pgrep "1.sh" | xargs kill

您还可以使用pkill与之前解释的相同但将所有内容组合成一个命令。

pkill "1.sh"

另一种方法是killall发送信号终端所有具有该名称的进程。

killall "1.sh"

答案2

Kill 命令只需要 PID(整数),我不确定如何仅通过ps -ef | grep 1.sh

我假设你必须终止所有进程实例1.sh脚本。

如果pidof你的机器上有二进制文件,你可以直接使用pidof 1.sh | xargs sudo kill,把这个命令放到你的MYCOMMAND.txt文件中

答案3

最佳答案:在 txt 文件中使用其他命令sudo su - -c 'pkill -f 1.sh',而不是sudo su - -c "killps -ef | grep 1.sh "

工作正常。

例如,查找并终止所有名为“1.sh”的进程。

谢谢@dave_thompson_085 的建议,尝试一下 pkill(这样更容易做到)

相关内容