bashから子プロセスを開いてから終了します

bash kill parent-child
bashから子プロセスを開いてから終了します

コマンドを実行し、しばらくしてから強制終了する最良の方法は何ですか? これが私が持っているものです。それは仕事をしますが、私は「amp:command not found」を取得し、なぜアンプがそもそもそこにあるのかはわかりませんが、それなしでは殺害が機能しないことを知っています。

feh "$output""$ext" &
echo $!
sleep 1
kill -s 9 $!
exit 1

問題は、実行中のプロセスのPIDがわからないことです。 実行時に割り当てることはできますか?

  3  0


ベストアンサー

coreutilsの最近のバージョンの一部であるhttp://www.gnu.org/s/coreutils/manual/html_node/timeout-invocation.html[GNU timeout]は、まさにあなたが望むことをします。

timeout 1 feh "$output""$ext"

`feh`を1秒間実行し、まだ終了していない場合はそれを強制終了します。

このコメントの残りの部分は、現在のレシピに関するものです。

現在使用しているレシピは、「&」を使用して「feh」をバックグラウンドに配置します。 「amp;」は間違いであり、おそらく熱心なHTMLエンコーダーによるものです(「&」はHTMLで「&」を綴る方法です)。

すべてのプロセスには、起動時にカーネルによってPIDが割り当てられます。 `$!`は、最後にバックグラウンド化されたプロセスのPIDのシェル変数です。

7


「&」は必要ありませんが、「&」だけが必要です。 アンパサンドは、bashにプロセスをバックグラウンドで実行するように指示します。

$! は、バックグラウンドプロセスのpidに設定されるため、そうでない場合は、サンプルは必要な処理を行う必要があります。

4


feh "$output""$ext" &
FEHPID=$!
sleep 1
kill -s 9 $FEHPID
exit 1

4


タイトルとURLをコピーしました