C言語例文集


 getpid()    プロセスIDを取得する

ヘッダ unistd.h
書式 pid_t getpid(void)
引数 なし
戻り値 現在実行しているプロセスのプロセスID
解説 現在実行しているプロセスのプロセスIDを返します。

サンプルプログラムはfork()を使用して、子プロセスを作成するマルチプロセスのプログラムです。

<サンプルプログラム>

/****************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

#define PROCESS_NUM 3
#define ROOP_NUM 3

// 子プロセスの処理
void child()
{
  pid_t c_pid;  // 子プロセスID
  pid_t p_pid;  // 親プロセスID
  int num;

  c_pid = getpid(); // 現プロセスID取得
  p_pid = getppid(); // 親プロセスID取得

  fprintf(stdout,"[PID:%d]子プロセス開始(親プロセスIDは%d)\n", c_pid, p_pid);

  for(num = 1; num <= ROOP_NUM; num++)
  {
    sleep(1);
    fprintf(stdout,"[PID:%d]%d回目のループ\n", c_pid, num);
  }
  fprintf(stdout,"[PID:%d]子プロセス終了\n",c_pid);
  return;
}

int main()
{
  pid_t c_pid;  // 子プロセスID
  pid_t p_pid;  // 親プロセスID
  int i;
  int status;

  // 親プロセスIDを取得
  p_pid = getpid();
  fprintf(stdout, "[PID:%d]親プロセス開始\n", p_pid);

  // 子プロセス生成
  for(i = 0; i < PROCESS_NUM; i++)
  { 
    switch(c_pid = fork())  // 子プロセス生成
    {
      case 0:  // 子プロセス
        child();
        exit(EXIT_SUCCESS);  // 子プロセス終了
      case -1:
        fprintf(stderr, "子プロセス作成エラー\n");
        break;
      default: // 親プロセス
        fprintf(stdout, "[PID:%d]子プロセス(pid=%d)作成\n", p_pid, c_pid);
        sleep(2);
        break;
    }
  }

  // 子プロセスの終了を待つ
  for(i = 0; i < PROCESS_NUM; i++)
  {
    c_pid = wait(&status);  // 子プロセスの状態変化を待つ
    fprintf(stdout, "[PID:%d]子プロセス(pid=%d)終了\n", p_pid, c_pid);
  }
  
  fprintf(stdout, "[PID:%d]親プロセス終了\n", p_pid);
  return 0;
}
/****************************************************************************/


<実行フロー>



<実行結果>




<Topページ>

Copyright(c) 2010 , cgengor
このWebページの内容を無断で複製または転載することを禁じます。
このWebページの情報を利用することにより発生したいかなる損害について著作権保有者はいっさいの責任を負いません。