負の数でプロセスを終了できないのはなぜですか?

負の数でプロセスを終了できないのはなぜですか?

一度に1つのシェルスクリプトインスタンスのみを実行し、新しいインスタンスが古いインスタンスを終了したいと思います。

私はLinuxを使用しており、これが良いアプローチだと思います。

# Terminate other instances by name and name self.
kill -15 $(printf -- '-%s ' $(pgrep mychosenname))
echo mychosenname >| /proc/$$/comm

子プロセスも終了したいので、PIDを無効にするにはprintfを参照してください。うまくいくようです。しかし、何らかの理由で私の〜/ .xprofile(Xが起動したとき)で作成されたプロセスでは機能しません。

ps -a示す:

...
  924 tty1     00:00:00 mychosenname?
...

pgrep -a mychosenname示す: 924 sh /home/sedwho/projects/mychosenname/run

手動で試してみると、次のような結果がkill -15 -924得られます。 kill: kill -924 failed: no such process そして以前と同じ出力を提供します。pspgrep

kill -15 924終了しますが、子プロセスは終了しないでください。 :(

答え1

否定的なプロセスIDではありません。

Killの2番目のパラメータとして渡される負の数は、プロセスグループID(pgid)を表します。

お客様の質問に回答するには、その番号のプロセスグループ ID がないため、プロセスグループ ID にシグナルを送信することはできません。

以下が役に立ちます。 ps -ao pid,pgid,user,time,command ps -q 924 pgid=

プロセスグループIDはどのように設定されますか?

ps マニュアルページ

関連情報