我正在运行java TCP / IP服务器/客户端设置,需要在bash文件中自动执行客户端的多个实例,如下所示:
javac *.java
java Server1 &
java Client &
java Client &
java Client &
java Client &
java Client &
ETC.
完成后如何让它们全部终止?
答案 0 :(得分:4)
如果您需要正确,安全的作业控制,则需要在后台应用程序中跟踪后台应用程序的进程ID。
您应该考虑使用类似这样的内容作为启动/停止脚本,而不是依赖ps
的输出:
#!/usr/bin/env bash
numclients=5
case "$1" in
start)
# Start the server first...
java Server1 &
pid=$!
echo "$pid" > /var/run/Server1.pid
# Then start the clients.
for clid in $(seq 1 $numclients); do
java client &
pid=$!
echo "$pid" > /var/run/client-${clid}.pid
done
;;
stop)
# Kill the clients first
for clid in $(seq 1 $numclients); do
if [ -s /var/run/client-${clid}.pid ]; then
kill -TERM $(< /var/run/client-${clid}.pid)
fi
done
# Then, kill the server
if [ -s /var/run/Server1.pid ]; then
kill -TERM $(< /var/run/Server1.pid)
fi
;;
esac
我刚刚写了这个,我还没有测试过。如果您的环境存在拼写错误或不兼容,请随时解决它们,并考虑上面的脚本脚本示例您应该做什么。
请注意,特别是,seq
命令在FreeBSD和许多Linux发行版中都可用,但不适用于旧版本的OSX。如果您需要,可以选择简单的替代品。 jot
可以作为OSX或FreeBSD的替代品,如果您不需要/想要使用$numclients
变量,您可以制作一个&#34;序列表达式&#34;通过使用{1..5}
(或其他)代替。
此外,在启动和终止应用程序时,您可能还需要考虑许多其他因素。例如:
您的操作系统已使用的工具可能涵盖所有这些条件。您可能希望使用系统脚本作为示例来构建应用程序启动和拆卸脚本。
答案 1 :(得分:1)
几乎所有Linux和OS X机器都有GridLayout
,它接受一个字符串并将终止相同名称的进程。
答案 2 :(得分:-1)
您可以使用kill
并传递来自pid
的{{1}}列表,如下所示:
grep