6

そうでない場合、C でバックグラウンド プロセスを開始するにはどうすればよいでしょうか。

4

3 に答える 3

9

Unixでは、exec()は話の一部にすぎません。

exec()は、現在のプロセス内で新しいバイナリを開始するために使用されます。これは、現在のプロセスで現在実行されているバイナリが実行されなくなることを意味します。

したがって、exec()を呼び出す前に、fork()を呼び出して新しいプロセスを作成し、現在のバイナリが実行を継続できるようにします。

通常、現在のバイナリで新しいプロセスが終了するのを待機させるには、wait *()ファミリの1つを呼び出します。この関数は、待機中のプロセスが完了するまで、現在のプロセスをスリープ状態にします。

したがって、「バックグラウンド」プロセスを作成するには、現在のプロセスは待機の呼び出しをスキップする必要があります。

于 2009-10-02T23:45:04.520 に答える
4

呼び出しを使用fork()して新しいプロセスを作成し、次に exec() を使用してプログラムをそのプロセスにロードします。詳細については、man ページ ( man 2 forkman 2 exec) も参照してください。

于 2009-10-02T13:01:07.787 に答える
3

Fork は子の PID を返すため、一般的なイディオムは次のとおりです。

if(fork() == 0)
    // I'm the child
    exec(...)
于 2009-10-02T23:50:58.187 に答える