2009-05-29 16 views
2

2つのC実行可能ファイルAとBが存在します。 AとBはソケットを介して互いに通信します。別のCプロセスから新しい独立プロセスを作成します。

Bは、独立して又はA.介し

  1. Bが最初に開始され、Aは、次の開始された場合、A及びBは問題なく正常に起動を開始することができます。 Aを再起動しても問題はありません。

  2. BがAを介して開始された場合、AとBは正常に開始します。しかしここでは、通信ポートはAとBの両方にバインドされています。ここで、Aが再起動されると、Aは起動に失敗します。 BがAを介して開始されるので

、プロセスA、プロセスBの親は、プロセスBは、プロセスAから独立して開始することが可能な任意の手段が、

そうですか?

私たちはforkを使ってみましたが、forkを使ってexeを起動しようとすると、2つのプロセスが1つではなく起動されています。

答えて

3

2回フォークする 'ラッパー'実行可能ファイルを使用しようとしましたか?Aは1回、Bは1回で終了してから自分自身を殺しますか?これは、AとBを別々のプロセスとして生き残り、initプロセスによって継承され、安全に再起動可能でなければなりません。

0

戻り値fork()の戻り値を正しく確認してもよろしいですか?

同様:

pid_t pid; 
if (pid == 0) { 
    /* child */ 
} 
else if (pid > 0) { 
    /* parent */ 
} 
else { 
    /* error */ 
} 
0

あなたがUnixドメインソケットまたは通常のネットワークソケットを使用していますか?

どのプロセスAまたはBがソケットでリッスンしている(パッシブオープン)か、アクティブなオープンを行っていますか?

AがBを実行する必要があると判断した場合、コードはこれがどのように必要であると判断しますか?

forkしてexecする前にソケットを開いていますか?

与えられた情報から、私の印象は次のとおりです。

  • あなたは
  • Bネットワークソケットを使用するには、リスナー

あるしかし、私は簡単に誤解される可能性があります。

フォークとexec Bの前にAが既にアクティブなソケットを作成しているので、Bがソケットのコピーをオープンしているので、Aが終了するとソケットのアクティブな端がきれいに閉じられないので、フォークするとき、子プロセスは、別のプロセスを実行する前に不要なファイルディスクリプタ(ソケットなど)をクリーンアップする必要があります。

関連する問題