タグ付けされた質問 「process-groups」

5
複数のコマンドを実行し、bashでそれらを殺します
単一のシェルで複数のコマンド(プロセス)を実行したい。それらはすべて独自の連続出力を備えており、停止しません。バックグラウンドでそれらを実行すると壊れますCtrl- C。それらをすべてCtrl-で停止できるように、単一のプロセス(サブシェル、多分?)として実行したいと思いCます。 具体的には、単体テストmocha(監視モード)を実行し、サーバーを実行してファイルの前処理(監視モード)を実行し、1つのターミナルウィンドウでそれぞれの出力を確認します。基本的に、タスクランナーの使用を避けたいと思います。 バックグラウンドでプロセスを実行することで実現できますが(&)、その後、それらを停止するにはフォアグラウンドに配置する必要があります。それらをラップするプロセスが欲しいのですが、プロセスを停止すると、その「子」が停止します。

1
kill 0は実際に何をしますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 UnixおよびLinux Stack Exchangeで話題になるようにします。 2年前に閉店しました。 でman page、それは言います: kill [ -s signal | -p ] [ -a ] [ -- ] pid ... pid... Specify the list of processes that kill should signal. Each pid can be one of five things: 0 All processes in the current process group …

1
/ procからプロセスグループIDを取得することは可能ですか?
「/programming/13038143/how-to-get-pids-in-one-process-group-in-linux-os」では、すべての回答が言及されps、言及されていないことがわかります/proc。 「ps」はあまりポータブルではないようです(AndroidとBusyboxのバージョンでは異なる引数が必要です)。シンプルでポータブルなツールでpgidを使用してpidをリストできるようにしたいと思います。 /proc/.../statusに表示されます Tgid:(スレッドグループID)、Gid:(セキュリティのグループID、プロセスをグループ化するためではなく)が表示されPGid:ますが、... pspidからpgidを取得する他の(使用していない)方法は何ですか?

1
子プロセスのPGIDが親のPIDではないのはなぜですか?
だから私はこのコマンドが親プロセスのすべての子プロセスを終了することをどこでも読み続けます: kill -- -$$ killコマンドでネガティブIDを使用するとPGIDが参照され、私が見た例では、子プロセスのPGIDは親のPIDであるはずですが、システムではそうではありません。 私のシステムでは、子のPGIDは親スクリプトのPGIDと同じであり、bashであることがわかりました。 何が起きてる?例は間違っていましたか、または私のシステムは異なって設定されていますか? 私が達成する必要があるのは、親が終了することなく子プロセスを終了することです。そのため、親がいるPGIDにkillシグナルを送信したくありません。

1
孤立したプロセスグループでインタラクティブシェルは何をすべきですか?
(/programming/13718394/what-should-interactive-shells-do-in-orphaned-process-groupsの提案に従ってUNIXに再投稿する) 簡単な質問は、ttyを所有していない孤立したプロセスグループ内にある場合、シェルは何をすべきかということです。しかし、面白いので、長い質問を読むことをお勧めします。 以下は、お気に入りのシェルを使用して、ラップトップをポータブルスペースヒーターに変える楽しくてエキサイティングな方法です(tcshの変人の1人でない限り)。 #include <unistd.h> int main(void) { if (fork() == 0) { execl("/bin/bash", "/bin/bash", NULL); } return 0; } これにより、bashはCPUを100%に固定します。zshとfishは同じことをしますが、kshとtcshはジョブ制御について何かをつぶやいてからキールします。これは少し優れていますが、それほど多くはありません。ああ、それはプラットフォームにとらわれない犯罪者です。OSXとLinuxの両方が影響を受けます。 私の(潜在的に間違っている)説明は次のとおりです:子シェルがそれがフォアグラウンドにないことを検出しました:tcgetpgrp(0) != getpgrp()。したがって、それ自体を停止しようとしますkillpg(getpgrp(), SIGTTIN)。しかし、その親(Cプログラム)がリーダーで死亡したため、そのプロセスグループは孤立SIGTTINしています。孤立したプロセスグループに送信されたものは削除されるだけです(それ以外の場合は、再び起動できません)。したがって、子シェルは停止されませんが、まだバックグラウンドにあるので、すぐにすべてが再び実行されます。すすぎ、繰り返します。 私の質問は、コマンドラインシェルがこのシナリオをどのように検出できるか、そしてそれを行うための正しいことは何ですか?私には2つの解決策がありますが、どちらも理想的ではありません。 pidがグループIDと一致するプロセスにシグナルを送ろうとします。それがで失敗する場合ESRCH、それはおそらく孤立していることを意味します。 から1バイトのノンブロッキング読み取りを試みます/dev/tty。それがで失敗する場合EIO、それはおそらく孤立していることを意味します。 (これを追跡する私たちの問題はhttps://github.com/fish-shell/fish-shell/issues/422です) あなたの考えをありがとう!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.