2つのスクリプトがあります。
running_script
script_one
ユーザー名で実行されているすべてのインスタンスのPIDを取得し、サブプロセスを停止する必要がrunning_script
ありpkill
ます。running_script
私たちが期待するものは次のとおりです。
ps -fu will | grep running_script
running_script
プロセスを見つけてください。ただし、psコマンドの出力についてPIDを確認すると、次のようになります。ガイドライン例: プロセスの "bin/bash running_script
"
running_script
開始された独立プロセス(&
オペレータ)として実行されますscript_one
。ps
コマンドの出力と比較するために、最初にPIDを印刷します。
running_script &
echo $! -- $BASHPID
実際のユースケースでは、running_script
一部の実行中のプロセスにPIDを提供しません。また、親プロセスから分離されたプロセスでも、script_one
そうでない場合もあります。running_script
練習目的でのみscript_one
ループを実行します。
while [ true ]
do
echo " $0 - 35sec ..."
sleep 35
done
しかし、これは単なる例です。要件は、running_script
親プロセスのPIDを取得することです。
ps
スクリプトファイルの名前とPIDを提供するオプションや他のコマンドはありますか?それとも名前をどのように決めますか?できる検索中ですか?
最後のユースケースでは複数のインスタンスがある可能性があるため、running_script
名前で選択するのが現時点では最良のオプションのようです。
はい
ps
ほとんどの回答はこれがうまくいくと思うようだったので、コマンドが表示する内容を示すのが役に立つと思いました。私はこの例をしばらく前に実行しました。
$ ./running_script &
$ echo $! - $BASHPID
9047 - 3261
$ ps -ef | grep will
UID PID PPID C STIME TTY TIME CMD
will 8862 2823 0 22:48 ? 00:00:01 gnome-terminal
will 8868 8862 0 22:48 ? 00:00:00 gnome-pty-helper
will 8869 8862 0 22:48 pts/4 00:00:00 bash
* will 9047 3261 0 22:55 pts/2 00:00:00 /bin/bash
will 9049 9047 0 22:55 pts/2 00:00:00 /bin/bash
will 9059 2886 0 22:56 pts/0 00:00:00 man pgrep
will 9070 9059 0 22:56 pts/0 00:00:00 pager -s
will 10228 9049 0 23:31 pts/2 00:00:00 sleep 35
will 10232 8869 0 23:31 pts/4 00:00:00 ps -ef
will 10233 8869 0 23:31 pts/4 00:00:00 grep --colour=auto william
PID#9047にタグ付けしました。以下のみ表示されます。 - will 9047 3261 0 22:55 pts/2 00:00:00/bin/bash
aaに似ていますか?」役職「Linuxでプロパティを設定できますか?
ベストアンサー1
pgrep -f running_script
プロセス名だけでなくコマンドライン全体を一致させるには、--fオプションを試してください。