使用setpgrp
vi
時(および他のttyプログラム)は、未使用時とはまったく異なる動作をしますsetpgrp
。例:
perl -MIPC::Open3 -e '$pid= open3("<&STDIN", ">&STDOUT", ">&STDERR", qw(perl -e),q(exec qw(bash -c),qq(vi foo))); wait'
これはうまく機能し、呼び出すことができますvi foo
。ただし、以下を追加してくださいsetpgrp
。
perl -MIPC::Open3 -e '$pid= open3("<&STDIN", ">&STDOUT", ">&STDERR", qw(perl -e),q(setpgrp;exec qw(bash -c),qq(vi foo))); wait'
それではそれほど効果的ではありません。
GNU/Linux(Mint)、FreeBSD、OpenBSD、Solaris、HPUX、AIX、Dragonfly でテストされました。すべて同様の動作を示した。
なぜ?どういうわけかプロセスグループを作成し、まだttyツールを作成できますかvi
?
背景
上記は、プロセスの代わりにプロセスグループを終了してプログラム全体の小さな部分を削除できるGNU Parallelの可能な拡張の一部です。したがって、「実行」の答えはvi foo
有用な答えではありません。
答え1
setpgrp
Darwin / MacOS(BSDベース)のマニュアルページから:
呼び出しプロセスがまだセッションリーダーではない場合、setpgrp()は呼び出しプロセスのプロセスグループIDを呼び出しプロセスのプロセスグループIDに設定します。 この操作で作成された新しいセッションには制御端末がありません。
これがあなたの答えです。