@DanielPorteousの答えは、あなたのプログラムでスレッドを使いたくない場合にも有効です。
考え方は簡単です。waitpid
とread
の機能は、操作に時間がかかります。考え方は、waitpid
が操作全体に影響を与えるものがない場合は、すぐに戻り、同じことが読み取り操作にもなるように、タイムアウトメカニズムを維持しています。
read
関数がバッファ全体の読み取りに非常に時間がかかる場合は、read
関数から読み取りを手動で制限することができます。そのため、全体を一度に読み取るのではなく、2ミリ秒読み込みます。実行するwaitpid
関数へのサイクル。
しかし、その目的のためにスレッドを使用して安全に実装するのはかなり簡単です。 Here's a nice guidelineスレッドの実装方法について
あなたの場合、2つのスレッドを宣言する必要があります。
pthread_t readThread;
pthread_t waitpidThread;
これで、スレッドを作成し、特定の関数をパラメーターとして渡す必要があります。
pthread_create(&(waitpidThread), NULL, &waitpidFunc, NULL);
pthread_create(&(readThread), NULL, &readFunc, NULL);
今すぐあなたのwaitpidFunc
とreadFunc
機能を記述する必要があります。彼らはこのように見えるかもしれません。
void* waitpidFunc(void *arg)
{
while(true) {
pid_t pid = waitpid(...);
// This is to put an exit condition somewhere.
// So that you can finish the thread
int exit = process_waitpid_event(...);
if(exit == 0) break;
}
return NULL;
}
あなたは非同期の方法でそれをしたいですか? –
これはスレッド問題のようなものです。 Cでスレッディングを実装する方法を検索することができます。 –
問題を詳しく説明してください。あなたのためのwaitpidは何ですか、あなたは何から読んでいますか?特に、子プロセスを1つしか持たず、出力を読み込みたいが、終了時を知る必要があるのはなぜですか? –