#! /bin/bash
make clean
make
port_number=8888
(./s $port_number) &
(./c 127.0.0.1 $port_number) &
(./c 127.0.0.1 $port_number) &
s和c是简单的tcp服务器和客户端。当客户端完成所有操作并停止服务器仍在运行但是当我停止脚本时,Ctrl + C服务器仍然在内存中,我需要手动杀死它。如何用脚本杀死它?
加入:
从接受的答案中捕获+使用等待使其发挥作用的好处。
工作过:#! /bin/bash
make clean
make
port_number=8888
(./s $port_number) &
s_pid=$!
(./c 127.0.0.1 $port_number) &
(./c 127.0.0.1 $port_number) &
trap "{ kill -SIGKILL $s_pid ; exit 0; }" SIGINT
wait
答案 0 :(得分:2)
尝试保存过程的pids:
#! /bin/bash
make clean
make
port_number=8888
./s $port_number &
s_pid=$!
./c 127.0.0.1 $port_number &
./c 127.0.0.1 $port_number &
并捕获SIGINT信号(应该在脚本的末尾)
trap "{ kill -SIGKILL $s_pid ; exit 0; }" SIGINT
你可以将pid保存到文件并参数化脚本,这样你就可以说
$ actions start
和
$ actions stop
类似
#! /bin/bash
pidfile="server.pid"
start_it(){
echo "Starting ..."
make clean
make
port_number=8888
(./s $port_number) &
# write pid-file
echo $! > $pidfile
(./c 127.0.0.1 $port_number) &
(./c 127.0.0.1 $port_number) &
}
stop_it(){
read -r pid < $pidfile
kill $pid
echo "Stopped."
}
case "$1" in
start)
start_it
exit 0
;;
stop)
stop_it
exit 0
;;
esac
exit 0
..如果这不是太多了:)
答案 1 :(得分:0)
像这样,例如:
kill $(jobs -p)