【发布时间】:2018-12-09 14:23:39
【问题描述】:
我有一个从 shell 脚本开始的进程集合,如下所示:
#!/bin/bash
#This is a shortcut to start multiple storage services
function finish {
alljobs=$(jobs -p)
if [ ! -z "$alljobs" ]; then
kill $alljobs >/dev/null 2>&1
else
echo "Entire trio ceased running"
fi
}
trap finish EXIT
./storage &
P1=$!
./storage &
P2=$!
./storage &
P3=$!
wait $P1 $P2 $P3
目前,它按照我想要的方式执行,当我向它发送ctrl+c 信号时,脚本会将该信号发送到我的所有后台进程。
但是:我现在扩展了这些程序,以便根据他们从客户端收到的连接/消息,他们可以执行execv,杀死自己并启动一个新的独立程序。 (出于好奇,他们通过启动一个空闲进程来模拟“服务器死机”状态,然后它可能会接收信号以再次启动原始进程。)
问题是,在execv 之后,这个新进程不再响应bash 脚本发送的kill。
有没有办法让这个原始脚本的执行(以及随后的信号)也向新的exec'd 进程发送信号?
【问题讨论】:
-
为什么在标签中使用 C++?
-
对不起,也许
c更合适;我预计答案可能涉及对execv调用的一些修改,或者程序的创建方式,目前都在 c++ 中