我有一个从 C++ 代码编译的 exe 文件。而我使用bash搭建Linux环境并调用这个.exe
程序。
现在谈到问题,大多数时候,用户希望ctrlc在完成使用程序或不想继续时使用来杀死进程。
bash 进程被ctrlc正确终止,但是,.exe
它通常在没有被杀死的情况下运行。所以用户需要使用kill -9 xxx
杀死进程。如果他们忘记杀死,他们的 CPU 可能会被完全占用。
我该如何着手解决这个问题?我应该为 exe 文件的代码或 bash 脚本做点什么吗?
谢谢
我有一个从 C++ 代码编译的 exe 文件。而我使用bash搭建Linux环境并调用这个.exe
程序。
现在谈到问题,大多数时候,用户希望ctrlc在完成使用程序或不想继续时使用来杀死进程。
bash 进程被ctrlc正确终止,但是,.exe
它通常在没有被杀死的情况下运行。所以用户需要使用kill -9 xxx
杀死进程。如果他们忘记杀死,他们的 CPU 可能会被完全占用。
我该如何着手解决这个问题?我应该为 exe 文件的代码或 bash 脚本做点什么吗?
谢谢
#!/bin/bash
./yourbinary &
pid=$!
trap "kill -9 $pid" SIGINT
wait
你是否在 bash 脚本中分离你的程序?你这样称呼它吗:
exe&
您可以删除“&”,脚本将在执行下一个命令之前等待程序结束。
如果问题不存在,请尝试将您的程序附加到控制台。例如,在 Qt 项目字符串中:
CONFIG += console
在 .pro 文件中将应用程序附加到控制台,脚本将等待应用程序结束并使用 Ctrl+C 终止应用程序。
这是我很久以前写的旧代码。我用它来杀死ffmpeg,我也在粘贴代码。我没有使用 ctr+c,而是使用进程 pid 来杀死它。我认为这一定是好方法。
else if (strcmp(client_message,"2-off") == 0) {
printf("start audio streeaming will be turned of\n");
fp = popen("pidof ffmpeg", "r");
fgets(line, 100, fp);
pid = atoi(line);
printf("pid = %d\n",pid);
sprintf(command,"kill %d",pid);
status = system(command);
pclose(fp);
}