我正在尝试从 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