シグナルまたは/procを介してプロセスをスリープモードから起動する方法は?

シグナルまたは/procを介してプロセスをスリープモードから起動する方法は?

数年前、私はLinuxでプロセスがランダムにスリープモードに移行するという問題に直面しました。当時、私は/procファイルシステムにプロセスを起こすトリックがあることを知っていました。似たようなことができた記憶が、とんでもないが"echo R" >/proc/pid/stat正しいコマンドではないようです。

インターネットには、「睡眠プロセスを目覚めさせる方法」に関するホットなトピックがたくさんあります。ほとんどの答えは「ああ、ただ殺してしまう!」です。他の方法があることは分かりますが、今は記憶力が悪いです。

私が今まで試したこと:

kill -SIGCONT <pid>
echo "R" > /proc/<pid>/status
echo "R" > /proc/<pid>/stat

ベストアンサー1

「睡眠」とはどういう意味ですか?

状態S(中断可能なスリープ)を参照すると、プロセスがI / Oを待っていることを意味します。プロセスは現在ブロックシステムコールを実行しています。一般的な方法で強制的に「目覚めさせる」ことはできません。それでは何をしますか?実行したい入力または出力操作が可能になると、目が覚めます(たとえば、データを読み取ることができるとき、書き込みチャネルが準備されたときなど)。

状態T(中止)を参照すると、プロセスは現在一時停止されていることを意味します。 CONT信号(SIGCONT)を送信して一時停止を解除できます。kill -CONT PID

プロセスは「ランダムにスリープモードに切り替わる」ことはありません。彼らは何もしなければ眠りにつく。 SIGTSTP、SIGSTOP、SIGTTIN、SIGTTOUなどのブロッキング信号を受信すると一時停止します。最後の2つの信号は、バックグラウンドプロセスが端末から読み取り(または書き込み)を試みると、カーネルの端末インタフェースによって送信されます。これを認識しないと、プロセスがランダムに中断されると考えることができます。これが発生した場合は、fgプロセスが属するジョブを表す正しいパラメータを使用してバックグラウンドジョブを開始したシェルでそれを実行する必要がありますfg %3

stat*Linuxのファイルは/proc読み取り専用なので、いつ書き込むことができるのかわかりません。そこに何を書きたかったのかわかりません。このファイルによって報告されるデータはカーネル管理データであり、その一部はプロセスによって直接変更される可能性がありますが、外部では変更できません。たとえば、魔法のようにプロセスを実行可能にすることはできません。

おすすめ記事