Linux/FreeBSDの子プロセスの終了を待つwaitシステムコールの使い方
スポンサーリンク
このドキュメントの内容は、以下の通りです。
はじめに
FreeBSD(UnixやLinux)では、新しいプロセス(子プロセス)をforkシステムコールを用いて作成します。子プロセスを作成し、子プロセスに処理をさせているときに、親プロセスが子プロセスの終了を待ちたいときがあります。子プロセスが終了したことを調べる方法、検知する方法がいくつかあります。今回は、waitシステムコールによる子プロセスの終了を待つ方法について、解説します。
書式
wait()システムコールのプロトタイプを以下に示します。。
#include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status);
statusには、子プロセスのステータス(終了情報)が格納されます。
戻り値
| 戻り値 | 説明 |
| -1 | なんらかのエラーが起きた場合。 |
| それ以外 | 終了した子プロセスのPID(プロセスID)が返ります。 |
サンプルコード
forkで子プロセスを作成し、子プロセスの中で長い処理(今回はとりあえずsleepさせるだけ)をさせます。親プロセスは、子プロセスの終了を待ち、子プロセスの終了ステータスを表示します。
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <sys/types.h> // fork/wait
#include <unistd.h> // fork/sleep
#include <sys/wait.h> // fork/wait
#include <err.h>
#include <errno.h>
int
main(int argc, char *argv[])
{
int status = 0;
pid_t wait_pid;
pid_t pid;
pid = fork ();
if (-1 == pid)
{
err (EXIT_FAILURE, "can not fork");
}
else if (0 == pid)
{
// child
(void) puts ("child start");
sleep (5); // 子プロセスの長い処理
(void) puts ("child end");
exit (EXIT_SUCCESS);
/* NOTREACHED */
}
// parent
(void) printf ("parents, child is %d\n", pid);
wait_pid = wait (& status);
if (wait_pid == -1)
{
// wait が失敗した
err (EXIT_FAILURE, "wait error");
}
(void) printf ("child = %d, status=%d\n", wait_pid, status);
exit (EXIT_SUCCESS);
}
コンパイル方法
コンパイル方法は以下の通りです。cc wait.c
実行例
実行方法は以下の通りです。% ./a.out parents, child is 58820 child start parents pid 58819 child end child = 58820, status=0
参照しているページ (サイト内): [2008-06-17-2] [2007-12-23-2] [2007-12-23-1]
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12