pgrep・pkillを用いて親プロセスから再帰的にプロセスを強制的にkillする

ちょっとした作業で、親プロセスIDを指定して子プロセスを再帰的にkillしたいということがあったので、その備忘。
特定のプロセスをkillする場合だと、よくpgrepを使ってプロセスidを取得して、そこからkillさせていたのだが、それだと子プロセスが残ってしまう。で、どうすればよいのかと調べたところ、pgrepやpkillでは-gオプションを付与することで全プロセスIDを取得・指定できるので、それを利用すれば良い。

Sponsored Links

pgrep -g $(pgrep 親プロセス名) # 子プロセスを含め、すべてのプロセスを取得する
pkill -g $(pgrep 親プロセス名) # 子プロセスを含め、すべてのプロセスをkillする
pkill -KILL -g $(pgrep 親プロセス名) # 子プロセスを含め、すべてのプロセスをkillする
[root@BS-PUB-CENT7-01 ~]# ps -ef | grep [s]ql
root      8532 10179  0 14:28 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables
mysql     8687  8532  0 14:28 pts/0    00:00:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
[root@BS-PUB-CENT7-01 ~]# pgrep -g $(pgrep mysqld_safe)
8532
8687

 

ちなみに、親プロセスを正常終了させるのであれば、以下のようにコマンドを実行してやれば良い。

pkill -TERM -P $(pgrep mysqld_safe)

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*