【发布时间】:2020-10-03 02:20:35
【问题描述】:
如何在不终止脚本的情况下终止 bash 脚本中正在运行的进程?
目标
所以...我需要终止一个正在运行的进程才能继续执行我的脚本。
这是我的脚本的精简版:
# Setup
echo "Use ctrl+C to stop gathering data..."
./logger
#------------------
echo "Rest..."
我需要能够在不杀死我的脚本的情况下杀死 ./logger
预期与实际结果
我期待这样的结果:
Use ctrl+C to stop gathering data...
^C
Rest...
但是当我杀死程序时它会停止
use ctrl+C to stop gathering data...
^C
./logger 命令是一个 C 程序,它已经处理了SIGINT 信号 (Ctrl + C),但它在收到它之前不会停止。
有没有办法在不杀死我的脚本的情况下停止程序?
C 程序并不重要,但它看起来像这样
#include <stdio.h>
#include <signal.h>
int flag = 1;
void handler(int i)
{
flag = 0;
}
int main(int argc, char** argv)
{
signal(SIGINT, handler);
while(flag)
{
usleep(10000);
}
}
【问题讨论】:
-
您应该使用
sigaction而不是signal,因为后者已被弃用。 -
@TedLyngmo 我不知道你的意思,但我在我的脚本中一次只运行一个命令。
-
为什么
./logger行周围有括号?您是否有理由需要它在子 shell 中运行? -
更重要的问题:您是否在脚本顶部设置了
-e标志? -
尝试将 bash 脚本剥离到其基本要素。对于初学者,有一个只运行 C 程序的脚本,然后在下一行输入一个简单的命令,如
echo Check。看看这是否有效。你需要的是minimal reproducible example。