Cygwin で子プロセス等に SIGSTOP, SIGCONT を kill(2) で投げた際、waitpid(2) で state の変化を拾おうとしたところ、なぜか取りこぼしが生じたり、state が変化しないという状況が生じたので、pid を指定して state (running, sleeping, stopping 等)を得たい。
JM を眺めて見たが、それらしいシステムコールが見当たらない。
JM を眺めて見たが、それらしいシステムコールが見当たらない。
/proc/<PID>/status を見ると重そうなので嫌だったのだが、適当な system call が見当たらなかったため、
仕方ないので以下のようにして State: 行の値から最初の 1 文字を拾うようにしてみた。
20201207: 追記
拾った文字の意味については ps(1) # プロセスの状態コード 参照かな?
仕方ないので以下のようにして State: 行の値から最初の 1 文字を拾うようにしてみた。
int getProcState(pid_t pid) { int state = 0; char fn[32], line[512]; sprintf(fn, "/proc/%d/status", pid); FILE *fp = fopen(fn, "r"); if (fp) { while(fgets(line, sizeof(line), fp)) { if (strstr(line, "State:")) { state = line[7]; break; } } fclose(fp); } return state; }
20201207: 追記
拾った文字の意味については ps(1) # プロセスの状態コード 参照かな?
タグ
コメントをかく