2

私は を呼び出していますsystem("bash ../tools/bashScript \"This is an argument!\" &")。次に、リターンのclose(socketFD)直後に呼び出してsystemいます。もちろん、の引数に意志が追加systemされていることを読みました。&forkcommandsystem

問題は、実行中にソケットを接続したままにしたくないということですcommandが、最も奇妙なことは、プログラムのワークフローが継続し、close多少見過ごされ、command終了するとclose有効になることです!

close作成された場合のすべてのコピーを確実に削除するために、お互いに2回呼び出してみましたが、それでも同じ問題です。なぜ呼び出されてsocketFDいるのか正直にわかりませんが、 (bashスクリプト)が終了するまで有効になりません!closecommand

お知らせ下さい!

4

1 に答える 1

2

私はあなたが何をしているのかについて少し混乱していますが、system事実上は薄いラッパーforkです。これは、両方のプロセスがソケット記述子のコピー*を持ち、1 つの「コピー」だけが閉じられることを意味します。systemもう 1 つは、コマンドが実行されているフォークされたプロセスも終了するまで存続します。

を呼び出す前にソケットを閉じてみませんsystemか?

'd 記述子で使用することもできますshutdown。たとえば、次のようになります。dup

shutdown(s,SHUT_RDWR);

*呼び出しによってファイル記述子とソケット記述子がどうなるかに関する規則forkは、「コピー」よりも少しわかりにくいですが、これがうまくいかない理由を説明するには十分です。

于 2013-05-13T20:40:30.783 に答える