我有一个名为Launcher.sh的shell脚本,由java进程执行。 java进程在内部使用ProcessBuilder来执行bash脚本。
在Launcher.sh中,我有以下代码
<target name="database" xsi:type="Database"
connectionString="Server=127.0.0.1;Port=5432;User Id=test;Password=t;Database=Test;">
<commandText>Insert into "system_logging" ("log_date","log_level","log_logger","log_message","log_machine_name","log_user_name","log_call_site","log_thread","log_exception","log_stacktrace") values (:time_stamp,:level,:logger,:message,:machinename,:user_name,:call_site,:threadid,:log_exception,:stacktrace)</commandText>
<parameter name="@time_stamp" layout="${longdate}"/>
<parameter name="@level" layout="${level}"/>
<parameter name="@logger" layout="${logger}"/>
<parameter name="@message" layout="${message}"/>
<parameter name="@machinename" layout="${machinename}"/>
<parameter name="@user_name" layout="${windows-identity:domain=true}"/>
<parameter name="@call_site" layout="${callsite:filename=true}"/>
<parameter name="@threadid" layout="${threadid}"/>
<parameter name="@log_exception" layout="${exception}"/>
<parameter name="@stacktrace" layout="${stacktrace}"/>
</target>
Process_A脚本将生成另一个名为Process_B的子进程。
当Launcher.sh脚本收到&#34; kill&#34;时,我想杀死Process_A和Process_B。命令或&#34; kill -9&#34;命令来自其父进程的java进程。
所以我添加了一个trap命令来捕获SIGINT,SIGTERM和SIGKILL中断。 但是当我做的时候
#!/bin/bash
trap "kill -- -$$ && kill -INT -$PID" SIGINT SIGTERM SIGKILL
bash Process_A.sh &
pid=$!
echo $pid
它只会杀死Process_A但不会杀死子Process_B。两者都有相同的PGID。
如何正确杀死从我的launcher.sh脚本生成的所有子孙进程?
这是&#34; ps j&#34;的实际输出。杀戮之前和之后。 在我的剧本中,我做了#34; dse spark&#34; inturn产生一个java进程。我希望当launcer脚本获得一个kill信号时,这个java进程被杀死
kill $pid
我试过这个......当我做的时候&#34;杀死pid&#34;其中pid是脚本的pid。当它进入无限循环时,我得到分段错误
root@WeveJobs01:~# ps j
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
2380 2381 2381 2281 pts/1 59265 S 0 0:00 /bin/bash
1 58917 58916 1152 pts/0 1236 S 0 0:00 bash /usr/bin/dse spark
58917 59041 58916 1152 pts/0 1236 Sl 0 0:07 /usr/lib/jvm/java-8-oracle/jre//bin/java -cp /etc/dse/spark/:/usr/share/dse/dse-
2381 59265 59265 2281 pts/1 59265 R+ 0 0:00 ps j
root@WeveJobs01:~# kill 58917
root@WeveJobs01:~# ps j
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1152 1235 1235 1152 pts/0 1236 S 0 0:00 sudo -s
1235 1236 1236 1152 pts/0 1236 S+ 0 0:00 /bin/bash
1 59041 58916 1152 pts/0 1236 Sl 0 0:23 /usr/bin/java -cp /etc/dse/spark/:/usr/share/dse/dse-
2381 59513 59513 2281 pts/1 59513 R+ 0 0:00 ps j
答案 0 :(得分:1)
我需要在trap语句中重置kill -term以防止无限循环。这工作
陷阱&#34;陷阱-INT&amp;&amp;杀 - - $$&#34;