私は記事を読んでいましたが、次のように読んでいます:外部コマンドを実行して終了するまで待つとします。私たちは永遠に待たずに、タイムアウトを設定してから子プロセスを終了させたいと思っています。これを行う方法?コマンドを実行するには、fork(2)とexecve(2)を使用します。特定のプロセスが終了するのを待つために、waitpid(2)関数を使うことができますが、タイムアウトパラメータはありません。また、sleep(3)を引数としてタイムアウトを指定してsleep(3)をSIGCHLDシグナルで中断するというループを作成することもできます。この解決策はほとんど...これには競合条件が含まれます。プロセスがすぐに終了した場合、sleep(3)を呼び出す前に、タイムアウトが切れるまで待機します。以前に説明したものと同様のレースです。システムコールはどのように中断されますか?子プロセスは親プロセスまたはシステムコールsleep(3)にシグナルを送信しますか?私はシステムコールが実行を停止し、親プロセスに渡す方法を取得しません、システムコールは別のプロセスのようですか?シグナルがシステムコールを中断する方法
答えて
すべてのベストをタイムアウト文献を使用することができますか?子プロセスは親プロセスまたはシステムコールsleep(3)にシグナルを送信しますか?
子プロセスがシステムコール終了を実行する(2)、そこexit_notify()
そこからdo_notify_parent()
からカーネル関数do_exit()
は、親にSIGCHLD
を送信し、__wake_up_parent()
を呼び出す、と呼ばれています。
私はシステムコールの実行を停止し、親プロセス に渡しますが、システムコールは別のプロセスと同様ですか?
システムコールの基礎となるsleep()
は、呼び出しプロセスを状態TASK_INTERRUPTIBLEに置きます。 g。 Sleeping in the Kernel。その後、プロセスは、上記の__wake_up_parent()
で起床するまで、またはタイムアウトまでスケジュールされません。
gnu popen Ref gnu libc Pipe to a Subprocessを使用して子をフォークすることができます。
これは、あなたがリセットアラームにできることから子を停止したい場合に役立つかもしれません。
そして
アラームとsetitimerが機能を使用するには、将来的に自分自身を中断するためのプロセスのためのメカニズムを提供します。彼らはタイマーを設定することでこれを行います。タイマーが満了すると、プロセスは信号を受信する。
NBあなたは上記
ポータビリティはexecve前に注意呼び出します。アラーム機能がで指定されている間、setitimerがとgetitimer関数はBSD Unixの由来しているのPOSIX.1標準。 setitimerは、アラームより強力ですが、アラームがより広く使用されます。
またman timeout part of coreutils
にシステムコールが中断されたどのよう
- 1. EINTR(中断されたシステムコール)を処理する方法
- 2. bash中断されたシステムコール
- 3. 中断されたシステムコール
- 4. スレッドでシステムコールの中断を伝える
- 5. thrift TServerSocket :: acceptImpl()THRIFT_POLL()中断されたシステムコール
- 6. シグナルで中断されたepoll_wait()
- 7. シグナルの処理中に同じシグナルをブロックする方法は?
- 8. 中断する方法Ext.each
- 9. シグナルで2つのブロッキングpthreadを中断する
- 10. ES6 MapでforEachを中断/中断する方法は?
- 11. システムコール内でプロセスを中断できますか?
- 12. システムコールはどのように中断されますか?
- 13. Pythonでインポートループを中断する方法
- 14. whileループを中断する方法は?
- 15. ブロッキングaccept()コールを中断する方法
- 16. Delphi 5:アンカーレイアウトを中断する方法
- 17. ExecutorServiceのスレッドを中断する方法
- 18. ScheduledExecutorServiceを中断する方法
- 19. Java - ビジースレッドを中断する方法
- 20. gitブランチを中断する方法は?
- 21. windows.printのページを中断する方法
- 22. トークバックイベントを中断する方法
- 23. ALAnimatedSpeechを中断する方法
- 24. RegexMatcherループを中断する方法
- 25. 中断シグナルがDockerコンテナに送信される原因は何ですか?
- 26. UIViewがperformSelectorを中断するのを止める方法
- 27. シグナルが切断されました -
- 28. は、Pythonマルチプロセッシングを中断します。Windowsのシグナルを使用しているプロセス
- 29. 中断されたシステムコールの再試行で問題が発生しました
- 30. ヒントがタイマーを中断するのを防ぐ方法