システムコール wiat3/wait4 を使うと、通常の wiat/waitpid と異なり fork した子プロセスのリソース情報も取得できる事を教わったのでメモ。


wait/waitpid を使うと、終了した子プロセスを zombie にならないように回収できる。wait3/wait4 を使うと、回収するだけでなく、子プロセスが消費したリース情報も取得できる。リソースは、システムコール getrusage で取得できるもの。

waitpid で置き換え可能
wait3/wait4 はともに waitpid で置き換え可能。

C Version

wait3(status, options, rusage)
waitpid(-1, status, options);

wait4(pid, status, options, rusage)
waitpid(pid, status, options)

Python Version

os.waitpid(-1, options)

os.wait4(pid, options)
os.waitpid(pid, options)

オプション WUNTRACED/WCONTINUED を渡すことで、プロセスが停止/復帰した時にも、リソース情報を返すようにできる。

wait3 はシステムコールではない

Linux では wait3 はシステムコールではない。

On Linux, wait3() is a library function implemented on top of the wait4() system call.

うっかり wait3 strace しようものなら、怒られてしまう。

$ strace -e wait3,wait4 ...
strace: invalid system call `wait3'


関数名につく 3 や 4 の意味がふめいだったのだけど、、、

The names for these two system calls refer to the number of arguments they each take.
Michael Kerrisk : The Linux Programming Interface. pp.552

fork して、適当に CONT/STOP シグナルを送りつつ wait3/wait4 する Python プログラムが以下。

Tagged with: , ,
Posted in linux

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: