在 Ubuntu 中终止子进程而不是父进程?

在 Ubuntu 中终止子进程而不是父进程?

我想在 Ubuntu 中终止一个进程。

我安装了 Java,并在后台运行 JBOSS 和 Tomcat。我需要在部署后终止 Tomcat,但当我终止它时,JBOSS 也会终止。

我不得不用

kill -9 pidofjava
killall tomcat

但状态依然是一样的。

我需要做什么才能终止进程属性?我的意思是子进程?

答案1

通常,进程会检查其子进程是否仍然存在,如果其中一个子进程中止,进程可能会自行关闭。

答案2

您可以循环遍历进程列表,识别具有相同父进程的子进程并逐个终止它们。

归因:http://www.unix.com/17901-post4.html

#!/bin/sh
while true
do
  echo "Enter parent process id  [type quit for exit]"
  read ppid

  if [ $ppid -eq "quit" -o $ppid -eq "QUIT" ];then
     exit 0
  fi

  for i in `ps -ef| awk '$3 == '$ppid' { print $2 }'`
  do
      echo killing $i
      kill $i
  done
done

你也可以通过会话 ID 来终止进程,但这样会获取父进程这些孩子。

https://serverfault.com/questions/40303/how-do-you-kill-a-process-tree-in-linux

ps -eo pid,ppid,sess,cmd -u ppetraki | grep whoami

pkill -9 -s SESS_ID

利用后者的信息,您可以构建一个仅针对儿童的更简单的工具。

相关内容