読者です 読者をやめる 読者になる 読者になる

撤退

情報系学科所属

tcsetpgrpの云々の話

フォアグラウンドプロセスグループの設定云々

ソースコード

上記のコードをOSX Yosemiteubuntu, CentOS 6で動かした.

実行結果

OSX

tcsetpgrp: Invalid argument
pgid: 1367
USER       PID  PPID  PGID   SESS JOBC STAT   TT       TIME COMMAND
surusuto  1367   309  1367      0    1 S+   s000    0:00.00 ./a.out
root      1368  1367  1367      0    1 R+   s000    0:00.00 ps -aj

tcsetpgrpに失敗していると分かる.

Ubuntu

pgid: 27015
   PID   PGID    SID TTY          TIME CMD
 27014  27014   2840 pts/8    00:00:00 a.out
 27015  27014   2840 pts/8    00:00:00 ps

tcsetpgrpに成功していて,存在していないpgidがフォアグラウンドプロセスグループIDになっている.

CentOSでも存在していないpgidがフォアグラウンドプロセスグループIDになっていた.

どうしてこうなった

シェルをUbuntu上で書いていて試しにOSXで動かしてみるとtcsetpgrpに失敗するので,色々試してみたところ,OSXLinuxで存在しないプロセスグループIDをtcsetpgrpで指定したときの挙動が違うことが分かった.

よくよくコードを見返してみるとsetpgidの前にtcsetpgrpをしていて,そのために存在しないプロセスグループIDがtcsetpgrpされていたのでOSXでは正しく動かなかったとわかったという話.

シグ松さん

僕の推し松は今回の話にちなんでSIGTTOU松!シェルを書くと必ず出てくるよね (詳しくはSoftwareDesign4月号参照)