0

別のプロセスで子プロセスを作成しようとしています。私は両方のプログラムを C 言語で書いています。まず、子プロセスとなるダミープロセスを作成します。やっていることは、画面に文字列を書き込むことだけです。それはそれ自体でうまく機能します。次に、親プロセスとなる別のプログラムを作成します。しかし、私はそれを実現することはできません。fork 関数と execl 関数を一緒に使用しようとしていますが、失敗します。また、親プロセスが終了するまで子プロセスが終了しないようにします。

親プロセスはどのように記述すればよいですか?

ありがとう。

子プロセスのコードは次のとおりです。

#include <stdio.h>

int main(void) {
  while(1) {
    printf("*");
    sleep(1);
  }
}

そして、ここに親プロセスがあります:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void) {
  if (fork()) {
    while(1) {
      printf("-\n");
      sleep(5);
    }
  } else {
    execl("./", "dummy", (char *)0);
  }
}
4

3 に答える 3

6

fork() システム コールは、失敗 (<0)、親プロセス (>0)、または子プロセス (==0) の 3 つの異なるステータスを返す場合があります。戻り値を適切にテストする必要があります。

int pid = fork();

if (pid < 0) {
  /* handle error */
  perror("fork");
  exit(1);
} else if (pid > 0) {
  /* parent code */
} else {
  /* child code */
}

execl() システム コールが間違っています。最初の引数は、実行したいプログラムへのパスです。「./」は有効ではありません。少なくとも「./dummy」のようなものにする必要があります。次の引数は慣例により、コマンド名 (実行されたプログラムの argv[0]) であり、最初の引数の繰り返しである可能性があります。そう:

execl("./dummy", "dummy", NULL);

printf("*")また、子プログラムのステートメントはおそらくバッファリングされ、端末には何も表示されないことに注意してください。最後に「\n」を追加するかfflush(stdout)、標準出力をフラッシュするために呼び出す必要があります。

于 2010-03-27T23:28:21.507 に答える
1

C での fork の基本的な使い方

int PID = fork();

if( PID < 0 ) {
    //fail
    return PID;
}
else if( !PID ) {
    //child process
    return exec( prog, args );
} 
else {
    //parent process
    return 0;
}
于 2010-03-27T23:06:14.633 に答える
0

子プロセスが完了したときに強制的に「終了しない」ようにする方法はありません(親プロセスで、wait終了方法に関する情報を取得することはできますが、それだけです)。それとは別に、このようなウェブ上のfork/の多くの例のどれも機能するはずです。試してみて、希望どおりに動作するかどうかを確認してください (その場合は、変更する必要があるだけです)。自分の試みで別の方法で行っていたものは何でも)。期待どおりに動作しない場合 (この A の最初の文の不可能性を除いて;-)、コードを編集して、コードが予想とは異なる動作をする方法について詳細を追加してください。exec

于 2010-03-27T23:09:22.560 に答える