一般的なプロセスにタグを付ける必要があります。実行中のコマンドを実際に制御することはできません。
次のようにできますか?
run_special_cmd(){
"$@" -- --very-special-command
}
run_special_cmd sleep 5000 && echo 'bar'
その後、次のように使用します。
pkill -9 -f '--very-special-command'
どのプロセスが終了するかをご覧ください。それとも、後で識別するためにプロセスを表示するより良い一般的な方法はありますか?
答え1
すべてのコマンドが渡された引数を無視するわけではありません。
呼び出されたプロセスが分岐しない場合は、呼び出しプロセスのpidを保存してexecとして呼び出すことができます。スクリプトの使用
#!/bin/sh
echo $$ > /var/run/foo.pid
exec "$@"
これにより、同じプロセスでコマンドが実行され、プロセスを実行する前にpidが保存されます。
pidファイルを削除するには、プロセスが終了した後に削除します。
#!/bin/bash
PIDFILE=/var/run/foo.pid
"$@" &
echo $! > $PIDFILE
wait
rm -f $PIDFILE
その後、バックグラウンドでプロセスが開始され、pidが記録され、プロセスが終了するのを待ってからファイルが削除されます。