1

私は自分のシェルを c で書いていますが、バックグラウンド プロセスの実装に問題があります。BASH では、「&」で終わるプロセスを実行するたびに、そのプロセスがバックグラウンドで実行を開始します。バックグラウンド プロセスの出力が端末に表示され、バックグラウンド プロセスに入力が必要になると、「fg」コマンドを実行するまで中断されます。

では、バックグラウンド プロセスを実装するにはどうすればよいでしょうか。

コマンドの通常の実行 (& で終わらない) では、fork システム コールを呼び出し、子プロセスでコマンドを実行すると、親は子プロセスの実行を待機します (wait() による)。

また、「&」を含むコマンドについても同じことを行いましたが、親は子プロセスの実行を待機しません。ここで私の問題は、バックグラウンドプロセスが入力を必要とするたびに、端末を制御することです。入力が必要なときに子プロセスを一時停止する方法。

4

1 に答える 1

0

親からプロセスを切り離すには、子プロセスで setsid() を使用する必要があります。これにより、新しいセッションでプログラムが実行されます

 sid = setsid();

http://www.netzmafia.de/skripten/unix/linux-daemon-howto.htmlも参照してください。

于 2013-01-16T03:12:41.890 に答える