プロセスがなぜ眠りに落ちて起きているのか、どうすればわかりますか?

プロセスがなぜ眠りに落ちて起きているのか、どうすればわかりますか?

「top」を実行すると、Perlスクリプトプロセスが「S」状態にあることがわかります。何がこのPerlプロセスをスリープ状態にし、どのように起きるかを知る方法はありますか?デバッグ方法を使用すると、Perlスクリプトを「S」状態にする行に関するより多くの洞察を得ることができます。

ベストアンサー1

状態のプロセスは、S通常、ファイルやネットワークの読み取りまたは書き込み、または他の呼び出されたプログラムが完了するのを待つなど、ブロックシステムコールにあります。

これを使用して、strace -p <pid>現在どのシステムコールが発生しているかを確認できます。次のような出力が生成されます。

write(1,"foobar"...,4096

これは、プロセスが「foobar」で始まる4096バイトをstdout(fd#1)に書き込もうとしますが、リダイレクトされた場所ごとに使用中であり、出力バッファがいっぱいであることを意味します。

おすすめ記事