NSTaskを同期して使用する必要がありますが、ときどき自分のタスクが 'waitUntilExit'コマンドの下でハングすることがあります。私は、優雅なやり方があるのだろうか - エラー処理方法 - ハンギングタスクを終了して別のものを再起動することができるのだろうか?waitUntilExitを使用してNSTaskを掛ける
7
A
答えて
1
-[task launch]
を使用してタスクを起動し、その完了したかどうかを確認するためにそのisRunning
プロパティを定期的にポーリングできます。所定の時間間隔の後に終了していない場合は、-[task terminate]
に電話をかけて終了することができます。これは、起動するタスクがSIGTERMシグナルを無視しないことを要求します。
タスク終了のポーリングがあなたのケースではあまりにも効率的でない場合は、タスクを起動した後にタイプDISPATCH_SOURCE_TYPE_PROC
のディスパッチソースを設定できます。タスクがNSTask
を介して出力パイプを埋め実行された場合、処理が効果的に戻ってからwaitUntilExit
を遮断する、ハングアップすることを
dispatch_source_create(DISPATCH_SOURCE_TYPE_PROC, task.processIdentifier, DISPATCH_PROC_EXIT, dispatch_get_main_queue());
12
注:タスクが終了したときに、このソースは、非同期のイベントブロックを呼び出します。
あなたは、これは、出力パイプのデータは、パイプが閉じる出力への書き込みプロセスまで読まれることになります
[task waitUntilExit];
を呼び出す前に
[task.standardOutput.fileHandleForReading readDataToEndOfFile];
を呼び出すことによって、この状況を防ぐことができます。
問題や様々なソリューションを実証するサンプルコード:
関連する問題
- 1. NSTask waitUntilExitが期待通りに機能しない
- 2. NSTask waitUntilExit jailbreakされたiOS上でアプリをぶら下げよう
- 3. シェルコマンドを実行する| (パイプ)NSTaskを使用して
- 4. howtoはjqgridでfooterdataを使用して行と合計を掛ける
- 5. java 8ストリームを使用してリスト内の値を掛ける方法
- 6. NSURLRequest SpringBoardを掛ける
- 7. マルチプロセスでexecを掛ける
- 8. 0を掛ける、ダブルナンバー
- 9. fork()を使って2次元配列を掛ける
- 10. NSTaskを使用してテール-fに似たものを得るには
- 11. NSTaskはコードの下に使用して、一時的なプロセスココア
- 12. 掛け算Silverlight Datagrid
- 13. が掛けn回
- 14. 使用NSTask:アプリの凍結出力
- 15. Eloquent Collectionsを合計して掛け算しますか?
- 16. RDLCにライブenvで100を掛ける
- 17. スカラーでNumPy配列を掛ける
- 18. Mongodbの値でフィールドを掛ける
- 19. F# - floatで整数を掛ける
- 20. ページを掛けるPHP - 問題
- 21. 行列とベクトルを掛ける
- 22. Erlang:2つのリストを掛ける
- 23. パンダのデータフレームの行を掛ける
- 24. 定数に範囲を掛ける
- 25. Pythonでバイナリ数値を掛ける
- 26. 2つの行列を掛けるR
- 27. NSTask
- 28. NSPipeを使用するプロセス間の通信NSTask
- 29. netlogoのn値を使ってリストの各要素を掛ける
- 30. Python Tkinter Currency Calculator FloatをRadioButtonで掛けて返します。var
すごいです!それを指摘してくれてありがとう - 私に吊り下げパイプを待っている時間の負荷を節約.. – Jay