Bashスクリプトで一意のプロセス名を持つ子プロセスを開始しようとしています。これは働きます:
bash -c "exec -a MyUniqueProcessName './start_service' &"
しかし、私の問題は、次start_service
のタスクを実行すると、パラメータを 。
bash -c "exec -a MyUniqueProcessName './start_service param' &"
または
bash -c "exec -a MyUniqueProcessName './start_service $myvar' &"
それでは失敗したと文句を言う
/start_service param: No such file or directory
私は何が間違っていましたか?
答え1
exec
ユーティリティとそのパラメータを次のように考えてください。分離議論:
bash -c "exec -a MyUniqueProcessName './start_service' 'param1' 'param2' 'etc.' &"
OpenBSDでテスト済み:
$ bash -c 'exec -a hello sleep 5 &' && pgrep -lf hello
1898 hello 5
$ bash -c 'exec -a hello sleep 5 &' && ps -a | grep hello
18164 p1 Sp 0:00.01 hello 5 (sleep)
26417 p1 R+/0 0:00.01 grep hello
Ubuntuで同じテスト(いくつかのコールバックを受け取りましたが、私はsleep
クエリしたときに得ましたhello
。大丈夫でしょう。Linuxは奇妙なものが混在しています):
$ bash -c 'exec -a hello sleep 5 &' && pgrep -lf hello
2849889 sleep
-f
ここに追加を参照してくださいps
。
$ bash -c 'exec -a hello sleep 5 &' && ps -af | grep hello
myself 2851359 1 0 17:41 pts/0 00:00:00 hello 5
myself 2851361 2848295 0 17:41 pts/0 00:00:00 grep hello