ユーザー所有プロセス以外のプロセスを終了するためのシェルスクリプト

ユーザー所有プロセス以外のプロセスを終了するためのシェルスクリプト

プロセスを終了してもrootが所有している場合は、エラーメッセージを返すスクリプトを作成するのに役立ちます。私はこの分野の完全な初心者であることを申し上げ始めたいと思います。現在、私はps -aef | grep $1 | grep -v grep | awk '{print $2}'プロセス名を引数として使用してうまく機能するkillを持っています。ただし、所有者がルートの場合、プロセスが終了するのを防ぐためにifステートメントとして機能させることはできません。

答え1

pgrep -u 0 "$1" && echo "Can't kill process: Owned by root" || killall "$1"

(root)が所有するプロセスpgrep -u 0のみが検索されます。UID 0プロセスが見つからない場合(したがって存在しないか、ルートとして実行されていない場合)、prgepはゼロ以外の戻りコードを返し、killallコマンドが実行されます。 prgrep が 0 戻りコードを返した場合、echo は実行されますが、killall コマンドは実行されません。

答え2

努力する

ps -aef | grep $1 | egrep -v grep | awk '$1 != "root" {print $2}'

このステートメントは、$1 != "root"ルートが所有するプロセスをフィルタリングします。デーモンプロセスでまだエラーが発生する可能性があります(www-dataApacheを実行している場合など)。

関連情報