我通过 ssh 登录到远程主机(debian)并执行如下命令
ssh user@remote_host "ps -ef | grep process_name | grep -v grep | awk {'print $2'} | xargs kill -9'
然后连接就断开了。
我 ping 远程主机,但收不到任何响应,就像网络未连接一样。但是当我重新启动远程主机(关闭电源并打开电源)时,一切正常。我保证被杀死的进程只是我编写的程序,它的父进程是“init”进程(如果进程在 fg 中运行并被杀死,则一切正常)。有谁知道为什么会这样吗?
答案1
我很奇怪你展示的命令是否运行没有错误。正如另一个答案中提到的,你向xargs
/传递了太多东西kill
,而它们却将其视为垃圾。
使用类似这样的方法只提取 PID 并终止它
ps -ef | grep process_name | grep -v grep | awk '{print $3}' | xargs kill -9
答案2
ps -ef | grep process_name | grep -v grep
不仅给出了进程号您想要杀死的内容,还有其他信息,例如 uid、进程的命令,这些可能会意外杀死某些内容。更不幸的是,它的进程标识符(父级 pid,对你来说为 1)也会显示出来,那么你就知道会发生什么。
你可以尝试
ssh user@remote_host "pkill process_name"
或者
ssh user@remote_host "ps -eo pid,cmd | grep process_name | grep -v grep | cut -d' ' -f2 | xargs kill -9"
或者你可以先获取它的输出:
ssh user@remote_host "ps -ef | grep process_name | grep -v grep"
然后自己过滤pid。