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
어느 시점에 모든 버퍼에 동시에 덤프되는 것처럼 보입니다.
이 문제에 대해 어떻게 해야 합니까?