ジョブ制御機能を持つシェルを使用すると、各パイプは通常独自のプロセスグループに配置されます。
子プロセスがインタラクティブプログラム(エディタなど)から作成されると、子プロセスは通常エディタと同じプロセスグループにあります。これは、エディタがバックグラウンドに切り替えられると、子プロセスも停止することを意味します。
これは、サブプロセス自体がPDFビューアなどのグラフィカルプログラムである場合は望ましくありませんokular
。
この場合、呼び出す正しい戦略は(vi
構文を使用)です。
:!set -m;okular %.pdf&
つまり、ビューアをバックグラウンドプロセスとして呼び出す前に、サブシェルが(タスク)モニタオプションを有効にすることを強制しますか? (サブシェルは、によって呼び出されると対話型ではないsystem()
ため、監視オプションはデフォルトでオフになっています。)
答え1
はい、set -m
1つの方法です。タイピングが少ない(事前準備なし)方法が思い出されません。
Linuxでは、別のアプローチは、コマンドの前にsetsid
。タイピングする量は同じですが、句読点が少なくて便利です。
別のアプローチは、中間対話型シェルを実行することです。しかし、まだタイピングはかなり厄介です。
setsid okular %.pdf&
set -m;okular %.pdf&
sh -ic 'okular %.pdf'&