Bash:启动并终止子进程

标签 bash process sleep

我有一个要启动的程序。假设这个程序将运行一个 while(true)-loop(所以它不会终止。我想写一个 bash 脚本:

  1. 启动程序(./endlessloop &)
  2. 等待 1 秒(休眠 1)
  3. 杀死程序 --> 如何?

我不能使用 $!从 child 那里获取 pid,因为服务器同时运行了很多实例。

最佳答案

存储 PID:

./endlessloop & endlessloop_pid=$!
sleep 1
kill "$endlessloop_pid"

您还可以使用 kill -0 检查进程是否仍在运行:

if kill -0 "$endlessloop_pid"; then
  echo "Endlessloop is still running"
fi

...并将内容存储在变量中意味着它可以扩展到多个进程:

endlessloop_pids=( )                       # initialize an empty array to store PIDs
./endlessloop & endlessloop_pids+=( "$!" ) # start one in background and store its PID
./endlessloop & endlessloop_pids+=( "$!" ) # start another and store its PID also
kill "${endlessloop_pids[@]}"              # kill both endlessloop instances started above

另见 BashFAQ #68 , "我如何运行一个命令,并让它在 N 秒后中止(超时)?"

ProcessManagement Wooledge wiki 上的页面也讨论了相关的最佳实践。

关于Bash:启动并终止子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39645713/

相关文章:

C++ GUI 应用程序 : Starting a child process in WndProc ( no MFC )

c - 时间逼近算法?

bash - Docker-运行容器时执行bash

windows - 在 Windows 上运行 docker shell

Java.exe 不使用 Process.start 打开

java - 在 Java 中,如何使用 Google 的 guava CharStreams.toString 进程中的 inputStream?

作为计时器的 Android 处理程序不准确

python - 如何在一定时间内运行代码?

json - 在shell脚本中解析json数组

bash - 逐字捕获命令行(包括引号!)以调用内部脚本