Unix C++でプロセスIDの取得方法を教えてください。
(見当違いの質問だったらすみません)
親プロセス(自分)のプロセスIDと、親プロセスの起動した子プロセスのプロセスIDを取得したいです。
また、親プロセスの起動した子プロセスのプロセスIDを使って親プロセス終了時に子プロセスをkillしたいと思うのですが、
具体的にどうすればいいかわからず困っています。

A 回答 (6件)

プロセスを殺す処理は kill() を使いましょう、と toysmith さんが


書いてましたね。

  kill(pid_c, SIGTERM);

です。

補足で「sig_handler とは?」とありますが、それはシグナルを処理する
為に書いた関数の名前です(関数名は何でもいい)。

一度、シグナルの処理をしてしまうと、初期状態に戻されてしまうので、
sig_handler() の中でも、signal() を使って、再登録しています。
    • good
    • 0
この回答へのお礼

ありがとうございました!
なんとか、子プロセスを終了することができました。
でも、まだまだわからない部分がいっぱいです。
もっと勉強しなくては。(^^ゞ
とにもかくにも、a-kumaさん、toysmithさんありがとうございました。

お礼日時:2001/07/11 14:30

toysmith> 多数の子プロセスを生成した場合、単一の子プロセスを狙い撃ちで里子に出すことが出来ません



親プロセスで SIGCHLD を無視するのは、「細かいことは知らんよ」という場合に
限って、とした方が良いでしょう。

一般的には、親プロセスで SIGCHLD を捕捉して、wait() をする、というかたちを
とります。

一番おおざっぱな形は以下のような感じ。

void sig_handler(int sig)
{
  wait(NULL);
  signal(SIGCHLD, sig_handler);
}

int main(void)
{
  signal(SIGCHLD, sig_handler);
  ...
}

もし、私がやるとしたら wait() よりも waitpid() を使うかな。
捕捉するシグナルが(親自身も含めて)ひとつとは限らないから、シグナルハンドラを
ひとつにしておいて

int sig_handler(int sig)
{
  if (sig == SIGCHLD)
  {
    int stat;
    while (waitpid(-1, &stat, WNOHANG) > 0)
    {
      /* stat 次第では、何か処理が有るかも */
    }
  }
  signal(sig, sig_handler);
}

ってな感じ。

この回答への補足

非常に申し訳ありません。a-kumaさん、toysmithさん。
いまだによくわかりません。
言いたいことはわかる気がするのですが、どういうふうにプログラムを組めばよいのか・・・。

===============================
void sig_handler(int sig)
{
  wait(NULL);
  signal(SIGCHLD, sig_handler);  /* sig_handlerとは? */
}

int main(void)
{
  signal(SIGCHLD, sig_handler);
  ...
  pid_t pid_c;
  pid_c = fork();
  if(pid_c == 0)
  {
   execl("aa", NULL);
  }
  else if (pid_c < 0)
  {
  }

・・・・
  /* プロセスを殺す処理? */
     
}


=======================
上記のようなプログラムになるのでしょうか?
子プロセスを殺す処理はどうなるのでしょうか?
ちなみに子プロセスはシェルです。

質問ばかりで申し訳ありません。よろしくお願い致します。

補足日時:2001/07/11 13:28
    • good
    • 0

unix系なら「お行儀良い終了要求」としてSIGTERMが用意されているので子プロセス(fork(2)だと生成されるのはスレッドではなくプロセス)でSIGTERMをトラップ(signal(2))してexit(2)した方が良いでしょう。



<defunct>はいわゆる「ゾンビ-プロセス」で、死にぞこなった状態です。
unixでは「親は子を産んだら死ぬまで面倒を目る」という決まりがあります。
子の死んだときの面倒(死に水を取るようなもの)の見方は…
wait(2)で子プロセスの終了を待つだけです。

親プロセスと子プロセスが同時に実行しなければいけない場合、安易にwait(2)すると親プロセスが止まって(=子プロセスの終了待ち)しまいます。
この場合は子プロセスをinitプロセスに里子に出すことでゾンビー化を回避できます。
initは全てのプロセスの先祖であり、全ての親無しプロセスを養子として迎え入れます。

子プロセスをinitに里子に出す方法はsignal(2)でSIGCHLDを無視するように設定ます。
ただ、子の方法にも問題があります。
多数の子プロセスを生成した場合、単一の子プロセスを狙い撃ちで里子に出すことが出来ません。
この場合は少々ややこしい制御が必要になります。
シェルで実現しているので不可能ではありませんが…。

この回答への補足

>親プロセスと子プロセスが同時に実行しなければいけない場合、安易にwait(2)すると親プロセスが止まって(=子プロセスの終了待ち)しまいます。
>この場合は子プロセスをinitプロセスに里子に出すことでゾンビー化を回避できます。
> initは全てのプロセスの先祖であり、全ての親無しプロセスを養子として迎え入れます。

>子プロセスをinitに里子に出す方法はsignal(2)でSIGCHLDを無視するように設定ます。
>ただ、子の方法にも問題があります。
>多数の子プロセスを生成した場合、単一の子プロセスを狙い撃ちで里子に出すことが出来ません。
>この場合は少々ややこしい制御が必要になります。
>シェルで実現しているので不可能ではありませんが…。

申し訳ありません。
プログラムは具体的にどうなるのでしょうか。
ご教授ください。

補足日時:2001/07/11 13:46
    • good
    • 0

以下、unixという言葉はunix系OS(unix version 6~9,SystemIII/V、全てのBSD及びXENIXを含むベンダー系UNIX)とunixもどきOS(minix,linux,xinuなど)の共通部分を指しています。


OS固有の拡張によって実現可能な場合があるかもしれません。

「まったく関係ないプロセスのプロセスID」を取得する事は(一般的な方法としては)ありません。

unixはPIDでプロセスを認識する為、他の方法では一意にプロセスを特定するとこが出来ません。
unixには「プロセス名」という概念は無く、しいて言えば実行ファイル(=実行権を持ったスクリプトを含む)の名称がプロセス名とされます。
よって、1コマンドが多重に起動された場合は全てのコマンドが同じプロセス名となるため一意に認識できません。
繰り返しますが、プロセスを一意に特定する為のキーはPIDのみです。

a-kumaさんがおっしゃるようにOSの持つプロセス管理テーブルを参照する事である条件下(プロセスを多重起動しない)でのみ一意性が産まれます。
ただし、unixはマルチユーザ、マルチタスクである為、この方法には確実ではありません。
確実でない事を覚悟の上ならa-kumaさんのおっしゃる方法でPIDの取得は可能でしょう。

cm = popen("ps -e | awk '/inetd/{print $1}'", "r");
の方が効率はいいでしょう。
プロセス起動(fork(2)とexec(2))はシステムコールの中でも最も非効率です。

移植性が無くなってもよいなら/dev/kmemをオープンしてプロセス管理テーブルを直接読み込む方法もあります。
/dev/kmemはunixカーネルが管理するメモリ領域そのもので、ここを読めば全ての管理情報が取得可能です。
psもここを読んで表示しているので結果としては同じになります。
ただし、/dev/kmemのフォーマットはOSごとに(下手をするとバージョンごとに)違いますのでkmem.h参照してプロセス管理テーブルの位置とフォーマットを調べる必要があります。
kmem.hは/usr/include/sysか/usr/include/hardwareにある事が多いのですが、これもOSによって違いがありますので御確認下さい。

この回答への補足

プロセス名でなんとかなるのかなあって思っていたのですが、確かにプロセス名だと、複数いたときどうする?っていう問題がありますね。

ところで、以下のように子スレッドを起動したとき、子スレッドをkillするにはどうしたらいいのでしょうか。kill(pid_c,SIGINT)ではできませんか?

=======================
pid_t pid_c;
pid_c = fork();
if(pid_c == 0)
{
execl("aa", NULL);
}
else if (pid_c < 0)
{
return -100;
}

=================================

また、ここで起動した子スレッドのaaなんですが、
psでみると、<defunct>となっています。
これはどうしてですか?
回避策はあるのでしょうか。

補足日時:2001/07/11 10:27
    • good
    • 0

> 親とか、子のプロセスでなく、まったく関係ないプロセスのプロセスIDをとることは可能ですか??



全く関係ないプロセスをどうやって特定しますか?

例えば、プロセス名が分かっているとしたら、一番汎用的なのは ps コマンドを
使うことです。例えば、inetd のプロセスIDを取得する場合、

FILE *cm;
int pid;
cm = popen("ps -e | grep inetd | awk '{print $1}'", "r");
fscanf(cm, "%d", &pid);

ってな感じ。

後は、どんな unix でも、ってわけにはいかないのですが、プロセスファイル
システムを使う手もあります。man proc を参照して下さい。
    • good
    • 0

unixを前提に考えると


親プロセスID:getppid(2)
自プロセスID:getpid(2)
子プロセスID:fork(2)の関数値
でわかると思います。
詳しくはmanでman 2 getpidなどとしてください。
(()内の数字がmanの第2パラメータ)

環境によって他にもやり方はあると思いますが上記の方法ならほとんどのunixで可能です。

この回答への補足

toysmithさんにはいつもいろいろ教えていただいてお世話になってます。
上記の件、確認したところ、IDが取れました。

ところで、もうひとつ追加質問なのですが、親とか、子のプロセスでなく、
まったく関係ないプロセスのプロセスIDをとることは可能ですか??

補足日時:2001/07/10 15:41
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q美容室の広告に載っている「ワンプロセス」の意味。

髪を切ろうと思い、ホットペッパーで美容室を
探していました。

カラーとか、パーマのとこに「ワンプロセスのみ」
という表示がされていることがありますが、
これはどのような意味なのでしょうか?

ご存知の方、教えてください。よろしくお願いします。

Aベストアンサー

ワンプロセスと言うのは、1回だけと言うことです。

たとえばカラーなら、1度薬液を付けるだけとかです。
カラーの場合は、新生毛とカラーの毛(既成毛)とでは色合いが違いますので、同じ薬液を塗れませんので2プロセス以上の施術になりますね。

Qpopenした子プロセスのプロセスIDを知る方法は?

タイトルのとおりです。
popen後のPIDを管理したいのですが
PIDを知る方法がわかりません。

どうしたらよいか教えてください。

Aベストアンサー

popenの仕様上、子プロセスのPIDを呼び出し元が知る方法は標準では用意されていません。

したがって、解決方法としては、ソースをコピーしてpopenのスーパーセットを用意するのが一番簡単です。

FreeBSDの/usr/src/libc/gen/popen.cの実装では、関数でstaticにポインタを確保していて、popenが呼び出されるたびにとpidとfpを保存するメモリの一次リンクが保持されています。

この場合、staticのポインタのリストの内容を取り出せる関数をひとつ実装するだけで、pidは取り出せます。
実装とはいっても、pcloseではwait4を実行するためにリストの内容をたぐるコードが入っているので、そこをコピペするだけです。

いかがでしょうか。

Qプロセス監視とサービス監視

下記の質問にてプロセスとサービスの違いについて少し理解ができました。
http://oshiete.goo.ne.jp/qa/7395829.html

しかし、私の理解が正しいとするとプロセスはサービスよりも詳細な単位になるためプロセス監視を行えばサービス監視は行えているということになります。

そこで二点質問がございます。
1.上記の私の理解は正しいか
2.プロセス監視ではなく、サービス監視を行う具体的な意味は

ご教示いただけますと幸いです。

Aベストアンサー

・UNIX系のinetdやwindowsのsvchostなどプロセス名とサービスが単純に結びついていないサービスがあります。
・プロセスは起動しているが、ハングアップなどでサービスとして機能していない場合があります

Q既存プロセスからプロセスのプライマリースレッドIDの取得方法

いつもお世話になってます。

プロセスに関することで分からないことがあるため、どなたか御教授して下さい。

只今、VC++で開発を行っているのですが、CreateProcess関数を使用して開始したプロセスの情報が、引数で指定したPROCESS_INFORMATIONにプライマリースレッドのハンドルやIDが設定されるのは知っているのですが、現在動作中のプロセスからそのプロセスのプライマリースレッドのIDを取得することは可能でしょうか?

具体的には、動作中のプロセスIDを指定するとそのプロセスのプライマリースレッドに対してPostThreadMessageで任意のメッセージが送れるという仕様です。

対象のプロセスがウィンドウを持っていれば、EnumWindows関数を使用してウィンドウに対してPostMessageができるというのは分かったのですが、今回対象のプロセスがウィンドウを持たない為、上記のようにスレッドに対してメッセージを送るようになっています。

CreateProcess呼び出し時にはスレッドIDが取得できることから、プロセスID、または、プロセスハンドルからスレッドIDが取得できるのではないかなと考えられるんですが。。。。

いつもお世話になってます。

プロセスに関することで分からないことがあるため、どなたか御教授して下さい。

只今、VC++で開発を行っているのですが、CreateProcess関数を使用して開始したプロセスの情報が、引数で指定したPROCESS_INFORMATIONにプライマリースレッドのハンドルやIDが設定されるのは知っているのですが、現在動作中のプロセスからそのプロセスのプライマリースレッドのIDを取得することは可能でしょうか?

具体的には、動作中のプロセスIDを指定するとそのプロセスのプライマリースレッ...続きを読む

Aベストアンサー

★アドバイス
・スレッド情報を列挙して一致するプロセスIDのスレッドIDを使えば良いと思います。
 列挙しないでプロセスID→スレッドIDの変換方法は私は知りません。あれば便利ですね。
 スレッドの列挙は Thread32First()、Thread32Next() 関数で行えます。
 詳しくは次のリンクをどうぞ。
 http://blog.goo.ne.jp/masaki_goo_2006/e/c80dd95f96cbd7aef524625da54b0ed0
 列挙したら THREADENTRY32 構造体の th32OwnerProcessID メンバが検索したい
 プロセスIDと一致していれば同じ構造体の th32ThreadID メンバがスレッドIDです。
 これでプロセスIDからスレッドIDに変換できます。
・以前に直接プロセスID(プロセスハンドル)からスレッドIDに変換する方法を探した事が
 ありますが見つかりませんでした。見つかったのはいずれも上記の方法ばかりです。
・以上。参考に。

参考URL:http://blog.goo.ne.jp/masaki_goo_2006/e/c80dd95f96cbd7aef524625da54b0ed0

★アドバイス
・スレッド情報を列挙して一致するプロセスIDのスレッドIDを使えば良いと思います。
 列挙しないでプロセスID→スレッドIDの変換方法は私は知りません。あれば便利ですね。
 スレッドの列挙は Thread32First()、Thread32Next() 関数で行えます。
 詳しくは次のリンクをどうぞ。
 http://blog.goo.ne.jp/masaki_goo_2006/e/c80dd95f96cbd7aef524625da54b0ed0
 列挙したら THREADENTRY32 構造体の th32OwnerProcessID メンバが検索したい
 プロセスIDと一致していれば同じ構造体の th32Thre...続きを読む

Q子プロセス、

親プロセスから子プロセスを生成するとは具体的に何を意味しているのでしょうか?
またresume文とはなんでしょうか?
何をしてくれているのでしょうか?
なぜUNIXは安定していると言われるのでしょうか?
聞いたけど忘れてしまいました、
お願いします。

Aベストアンサー

再レスです。
身近な例ですとエクセルとかで新規作成ボタンを押すと新しいシートが作られるじゃないですか。
いくつも作れてどれも同じ動作やインターフェースをしています。
それらのシートはボタンが押されるまで存在しなかったものです。
また、それらは独立しているので、どのシートに移動しても構いませんよね。
立派な子プロセスですよね。メモ帳なんかだと親プロセスが新たに開きますね。
この例ではユーザーの操作によるものですが、プログラムによっては内部でプロセスを作り並列的に動作するものもあります。

Q子プロセスと親プロセス

ある本を読んでいると、以下のような問いにぶち当たり、プログラムの仕方がよくわからないのです。
自分でもいろいろ調べたのですが、わからないので質問させていただきます。

自分のプロセスIDと親のプロセスIDのプロセスIDを表示するコマンドshowpidを作り、showpidを子プロセスとして10回実行するプログラムを作りなさい。ただし、execを用いてshowpidを10回実行すること。

というものなのですが、自分のプロセスIDと親のプロセスIDの表示方法はわかったのですが、それをコマンドとして作り、子プロセスとして10回実行する方法がわからなくて困っております。。。

言語はc言語を使ってもらいたいです。以下に自分のプロセスIDと親のプロセスIDを表示するプログラムを付けときます。

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

int main(){
pid_t pid;
int status;
if((pid=fork())==0)
printf("I am a child with pid=%d. My parent pid is %d.\n",getpid(),getppid());
else{
wait(&status);
exit(EXIT_SUCCESS);
}

ある本を読んでいると、以下のような問いにぶち当たり、プログラムの仕方がよくわからないのです。
自分でもいろいろ調べたのですが、わからないので質問させていただきます。

自分のプロセスIDと親のプロセスIDのプロセスIDを表示するコマンドshowpidを作り、showpidを子プロセスとして10回実行するプログラムを作りなさい。ただし、execを用いてshowpidを10回実行すること。

というものなのですが、自分のプロセスIDと親のプロセスIDの表示方法はわかったのですが、それをコマンドとして作り、子プロセス...続きを読む

Aベストアンサー

showpid.c では単に、getpid() と getppid() の結果を出すだけでいいです。それをコンパイルすればコマンドが出来ます。

メインのプログラムでは、こんな感じで。
for(10回ループ) if(fork()==0) execv(showpidコマンド)

Qビジネスの場における「プロセス」とは?

初めまして、今現在大学生で、企業にてインターンをやっています。

上司や社員と会話、会議をする際に「プロセス(Process)」という言葉がよく使われるんですが、その言葉自体の概念、意味を理解できていないせいでまったくピンと(理解で)きません。

例えば、ある事、業務を上司に説明した際に、
「プロセスでものを考えないと伝えたいことが上手く伝わらない」、
「このプロジェクトに関してのプロセスを資料としてまとめて」など言われます。

ここで言う「プロセス」とはどういう事でしょうか?
質問が抽象的過ぎて、答えにくいかと思いますがお願いします。

Aベストアンサー

日本語としては「手順」・「流れ」でいいんですが、「プロセス」と
言った場合、言外に「何か全体としての"システム"が存在して、
その結果としての"手順"」という意味があります。

「システム」が中身で、それが外に出てきたものが「プロセス」と
いう感じですね。往々にしてこの2つの言葉はセットにして使われ
たりしますし・・・。

単に「手順」と受け取ると、言外にある「全体としての"システム"」
を見落としてしまう可能性がある、という点には注意して下さいね。

Q子プロセスの状態を親プロセスに渡したい

今、C言語を用いてシェルを作成していて、そこでcpコマンドを実現したいと思っています。その際、子プロセスを生成し、そこでgetcwdやchdirを使用してディレクトリの移動を行うのですが、子プロセスを終了させると親プロセスでは移動前のディレクトリに戻ってしまいます。
子プロセスでディレクトリを移動したときに,親プロセスでも移動された状態にするにはどうすればいいのでしょうか?それとも、この操作は親ディレクトリでしか行えないのでしょうか?
できるだけ詳しく教えていただけるとありがたいです。回答よろしくお願いします。

Aベストアンサー

質問に「cpコマンドを実現したい」と書かれているのは、もしかしてcdコマンドの書き間違いでしょうか。そう考えると、なぜ親プロセスのカレントディレクトリを移動したいのかが納得できます。
この推測が合っていたとして、普通はcdコマンドのために子プロセスを作ることはしません。cdはシェルのビルトインコマンドとして実現されているのが一般的です。

Qillustrator 特色やグローバルプロセスカラーについて

illustrator初心者です。
スウォッチパレットというのがあって、グローバルプロセスカラーや特色などあるのですが、このグローバルプロセスカラーを特色に変換するということはどういう意味があるのですか?
また、色を登録するときにはどの色でも特色として登録することができるのでしょうか?
よろしくお願いします。

Aベストアンサー

>一般に使う場合にはillustratorのスウォッチオプションの特色をプロセスカラーに変換して使用したりすることにはどんな意味があるのですか?それとも、これはほとんど印刷所向けのための機能なのでしょうか?

こうした板で色に関する論議をする際は、RGBカラー系とCMYKカラー系を切り分けておかないとややこしくなります。
一般の人にはCMYKも特色も無縁の領域ですから、先にも言ったように「どうぞお好きなように」です。つまり家庭用や事務用プリンタのインクはお望みのインクに変えることはできないからです。同様にプロセスカラーというCMYKについても一般のパソコンユーザには無縁な領域であり、使いようのない色体系です。
このようにプロセスカラーとかillustratorのスォッチとして登録されているDICやパントンなどは、インキを変更できる商業印刷機だけの独特のカラー体系で、それをパソコン上で事前にシミュレートする機能としてあると受け止めてください。
ただしモニタのカラー体系はRGBですから、スオッチにある特色も印刷された時の色とはずれがあります。そこで実際に印刷されたカラーチップで確認しておかないと、結果確認にはなりません。

>DTPをマスターするには印刷会社などにアルバイトしたほうが早く覚えられるのでしょうか・・・。

将来商業印刷関連の職種を指向するなら、この世界の空気に触れておくことは有意義でしょう。ただし色の決定権はデザイナーやクライアントにあるので、印刷所のオペレーターが自己決定するケースはそうザラにあるわけではありません。その辺も考慮の内に入れておいてください。
もしDTPとCMYKカラー体系について勉強したいのであれば、
↓『DTP&印刷スーパーしくみ事典』がお薦めです。

http://www.jagat.or.jp/books/Catalog/itaku.htm

参考URL:http://www.jagat.or.jp/books/Catalog/itaku.htm

>一般に使う場合にはillustratorのスウォッチオプションの特色をプロセスカラーに変換して使用したりすることにはどんな意味があるのですか?それとも、これはほとんど印刷所向けのための機能なのでしょうか?

こうした板で色に関する論議をする際は、RGBカラー系とCMYKカラー系を切り分けておかないとややこしくなります。
一般の人にはCMYKも特色も無縁の領域ですから、先にも言ったように「どうぞお好きなように」です。つまり家庭用や事務用プリンタのインクはお望みのインクに変えることはできないからで...続きを読む

Q子プロセスのデータを親プロセスに渡す方法ってありますか。

こんにちは。

C言語内でfork()関数を使い親と子を分け、子プロセス間で生成されたデータを親プロセス側に渡して処理したいと考えています。要は、プロセス間でデータのやり取りをpipe()関数かなにかで行いたいと思っています。
子プロセスがデータをテキストファイルでどこかに出力して、それを親プロセスが参照する、というテキストファイルを橋渡しにする原始的な方法があるにはあるのですがこれは最終手段にしたいと考えています。他に良いやり方があればご教授いただけないでしょうか。

以下はサンプルコードです。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<errno.h>
#include<signal.h>
#include<sys/types.h>


int main(){
FILE *fp,*fp2;
int fd[2],a,i = 0;
pid_t pid;
pipe(fd);
char buff[1024];
pid = fork();

sigignore(SIGCLD); //ちゃんと子が死ぬようにする

if(pid == 0){
close(STDOUT_FILENO); //画面に出力されないようにする
dup2(fd[1],STDOUT_FILENO);
close(fd[0]);
fp = popen("tcpdump","tcpdump","tcp[13] & 255 == 2",NULL);
}
else{
sleep(1); //一秒だけ子プロセスを起動
kill(pid,SIGTERM);
wait(); //完全に子プロセスを殺す

fp2 = popen("wc -l fpのファイルデータ","r");
for(i=0;i<3;i++){
a = fgetc(fp2);
putc(a,stdout);
}printf("\n");
return 0;
}

}

プログラムの内容は、
tcpdumpで処理(子プロセス)した内容を、wc -l で「行数」のみ取得する(親プロセス)というものです。あくまで目標ですが・・。^^;
お手数でしょうが、どうぞよろしくお願いします。

こんにちは。

C言語内でfork()関数を使い親と子を分け、子プロセス間で生成されたデータを親プロセス側に渡して処理したいと考えています。要は、プロセス間でデータのやり取りをpipe()関数かなにかで行いたいと思っています。
子プロセスがデータをテキストファイルでどこかに出力して、それを親プロセスが参照する、というテキストファイルを橋渡しにする原始的な方法があるにはあるのですがこれは最終手段にしたいと考えています。他に良いやり方があればご教授いただけないでしょうか。

以下はサンプ...続きを読む

Aベストアンサー

パイプを2本開いて、それでやり取りしてください。

プロセス間通信-双方向(fork,pipe,socketpair)
http://a-gamyl.hp.infoseek.co.jp/Clang/list_74.html

socketpair が割合お手軽かも。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング