Linux 退出shell脚本时,如何杀死所有子进程?

Linux 退出shell脚本时,如何杀死所有子进程?,linux,shell,scripting,csh,Linux,Shell,Scripting,Csh,我有一个运行程序的C shell脚本。那个程序产生了一个孩子。当我通过ctrl-C向我的shell脚本发送一个SIGINT时,shell脚本和它产生的进程都会退出。然而,最后一个过程仍然存在。我如何指示C shell在退出之前杀死所有子进程呢?为SIGINT创建一个信号陷阱怎么样 为什么要用C shell编写脚本?对于脚本编写来说,它是最糟糕的shell。是的,我知道这是一种可怕的“语言”,我(幸运的是)已经好几年没有安装C shell了(特别是tcsh),但也许可以尝试挂断(stty hupc

我有一个运行程序的C shell脚本。那个程序产生了一个孩子。当我通过ctrl-C向我的shell脚本发送一个SIGINT时,shell脚本和它产生的进程都会退出。然而,最后一个过程仍然存在。我如何指示C shell在退出之前杀死所有子进程呢?

为SIGINT创建一个信号陷阱怎么样


为什么要用C shell编写脚本?对于脚本编写来说,它是最糟糕的shell。是的,我知道这是一种可怕的“语言”,我(幸运的是)已经好几年没有安装C shell了(特别是tcsh),但也许可以尝试挂断(
stty hupcl
),然后使用
kill-6$$
?听起来问题在于程序没有杀死它的孩子,而不是你的脚本。
#!/bin/csh

# Setup sigint handler
onintr close

# start a background process
sleep 1000&
setenv pid $!

while (1 == 1)
  echo Program is running
  sleep 2
end

close:
echo End of program. Kill $pid
kill $pid