我通过ssh登录到远程主机(debian),并执行如下命令
ssh user@remote_host "ps -ef | grep process_name | grep -v grep | awk {'print $2'} | xargs kill -9'然后连接中断。
我平了远程主机,无法接收任何响应,就像网络没有连接一样。但是,当我重新启动远程主机(断电和开机)时,一切正常。我保证被杀死的进程只是我写的程序,它的父进程是"init“进程(如果进程在fg中运行,并且被杀死,那么一切都是正常的)。有没有人知道为什么会发生这种事?
发布于 2012-04-27 09:05:57
ps -ef | grep process_name | grep -v grep不仅给出了你想要杀死什么的pid,而且给出了其他信息,比如uid,进程的命令,这些命令可能会意外地杀死一些东西。更不幸的是,它的ppid (父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。
发布于 2012-04-27 09:16:45
我不知道你展示给我们的命令竟然没有出错。正如在另一个答案中提到的,您将太多的东西传递给xargs/kill,它们将其视为垃圾。
使用这样的方法只提取PID和杀死它。
ps -ef | grep process_name | grep -v grep | awk '{print $3}' | xargs kill -9https://serverfault.com/questions/384014
复制相似问题