Coro、Coro::LWP、LWP::UserAgent を使用したスクリプトがあります。一連のリクエストを作成し、Coro の非同期 {} で実行します。次に、それらの結果を使用してファイルに保存します。スクリプトが数時間、場合によっては数分間実行された後、フリーズします。strace ルックアップを作成して、それが何をしているかを確認しました。たくさんのアクションがありますが、結果を保存した後、フリーズする前にこのアクションがありました:
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1211417888, 0}, {1211354002, 168413065}) = ? ERESTART_RESTARTBLOCK (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
restart_syscall(<... resuming interrupted call ...>) = ? ERESTART_RESTARTBLOCK (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
restart_syscall(<... resuming interrupted call ...>
フリーズを理解するのに何か奇妙なことはありますか?
PerlMonks でクロスポストされました。
解決済み: 非常に大きな秒数 (4000 日間など) の奇妙な usleep でした。