为什么当我终止远程主机上的进程时连接会中断?

为什么当我终止远程主机上的进程时连接会中断?

我通过 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。

相关内容