[解決済み] C言語でのwaitの使い方
2022-03-02 11:03:14
質問
を使用するにはどうすればよいのでしょうか?
wait
? という疑問が湧いてきます。I
fork
再帰を持つプロックのツリーで、私がpstreeを実行する間、子プロックは一時停止(待機/スリープ)しなければならず、私はプロックツリーを印刷することができます。
を使用する必要があります。
int status;
wait(&status);
というか
wait(NULL)
これはどこに書けばいいのでしょうか?
if(pid > 0)
または子
if(pid==0)
? ifの末尾にあるかもしれないので、すべての
pid
を配列に格納し、その上で
for
を実行し、waitを使用しますか?
私のコードテンプレートです。
void ProcRec(int index)
{
pid_t pid;
int noChild = getNChild(index);
int i= 0;
for(i = 0; i < noChild; i++)
{
pid = fork();
if (pid > 0)
{
/* parent process */
}
else if (pid == 0)
{
/* child process. */
createProc(index+1);
}
else
{
/* error */
exit(EXIT_FAILURE);
}
}
if(getpid() == root)
{
sleep(1);
pid = fork();
if(pid == 0)
execl("/usr/bin/pstree", "pstree", getppid(), 0);
}
}
解決方法は?
その
wait
システムコールは、プロセスをスリープさせ、子プロセスが終了するのを待ちます。そして、引数に子プロセスの終了コードを記入します (引数が
NULL
).
つまり、親プロセスで
int status;
if (wait(&status) >= 0)
{
if (WEXITED(status))
{
/* Child process exited normally, through `return` or `exit` */
printf("Child process exited with %d status\n", WEXITSTATUS(status));
}
}
そして、子プロセスでは、次のようにします。
exit(1)
と表示され、上記のコードが表示されます。
子プロセスが 1 のステータスで終了した
また、すべての子プロセスを待機させることが重要であることに注意してください。待機しない子プロセスは、親プロセスがまだ動作している間はいわゆるゾンビ状態になり、親プロセスが終了すると子プロセスは孤児となってプロセス1の子になります。
関連
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】「構造体でもユニオンでもないものにメンバー'*******'を要求する」とはどういう意味ですか?
-
[解決済み] エラー: `itoa` はこのスコープで宣言されていません。
-
[解決済み】押されたキーをpythonスクリプトで待たせる方法とは?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] bash で複数のサブプロセスが終了するのを待ち、いずれかのサブプロセスがコード !=0 で終了したときに終了コード !=0 を返すにはどうすればよいですか?
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み】GCC Cコードで静的宣言が非静的宣言に続くことを解決するには?
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み】C言語で多重定義を防ぐには?
-
[解決済み】コンパイラの警告 - 真理値として使用される代入の周囲に括弧を付けることを推奨する
-
[解決済み】argv[]をint型として取得するには?
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】whileループの時間複雑性(Big O)はどうやったらわかるの?