一度に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
そして以前と同じ出力を提供します。ps
pgrep
kill -15 924
終了しますが、子プロセスは終了しないでください。 :(
答え1
否定的なプロセスIDではありません。
Killの2番目のパラメータとして渡される負の数は、プロセスグループID(pgid)を表します。
お客様の質問に回答するには、その番号のプロセスグループ ID がないため、プロセスグループ ID にシグナルを送信することはできません。
以下が役に立ちます。
ps -ao pid,pgid,user,time,command
ps -q 924 pgid=