i3blocks では、次のブロックを定義します。
~/.config/i3blocks/config
:
[test]
interval=persist
format=json
対応する実行可能スクリプト
~/.config/i3blocks/config.scripts/test
:
#!/usr/bin/python
from time import sleep
while True:
print("test")
sleep(5)
後で、「test」を実際のJSON文字列に置き換える予定です。デバッグ目的でこのバージョンでのみ削除します。
コマンドラインからこのコマンドを実行すると、test
予想どおり5秒ごとに印刷されます。 PIDを取得して次stdout
のようにps aux
確認できますstrace
。
$ sudo strace -p82267 -s9999 -e write
strace: Process 82267 attached
write(1, "test\n", 5) = 5
write(1, "test\n", 5) = 5
[...]
ps aux
また、i3blocks が起動した他のプロセスも示しています。strace
このプロセスは私に何の結果も与えず、その理由を理解していません。ループが実行されているようですが実行されませんstdout
。これを確認するためにループを削除してi3blocksを再起動しましたが、プロセスはリストされなくなりました。
プロセスの起動時にi3blocksが表示されないのはstdout
なぜですか?
編集する:
長い間実行した後、次の事実が見つかりました。一群のテキストが一度にダンプさstrace
れることを示しました。stdout
$ sudo strace -p79878 -s9999 -e write
strace: Process 79878 attached
--- SIGSTOP {si_signo=SIGSTOP, si_code=SI_USER, si_pid=79873, si_uid=1000} ---
--- stopped by SIGSTOP ---
--- SIGCONT {si_signo=SIGCONT, si_code=SI_USER, si_pid=79873, si_uid=1000}
write(1, "test\ntest\n[...a big big block of output here...]test\ntest", 8194) = 8194
SIGSTOPとSIGCONTも数回発生しました。
したがって、出力は長い間、stdout
いくつかのバッファに保存されていたが、ある時点ですべてのバッファに同時にダンプされるように見えます。
この問題についてどうすればよいですか?