我尝试使用这个命令:
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 "kill
ps -ef | grep 1.sh "
。
工作正常。
例如,查找并终止所有名为“1.sh”的进程。
谢谢@dave_thompson_085 的建议,尝试一下 pkill(这样更容易做到)