【发布时间】:2015-11-14 01:23:13
【问题描述】:
我正在运行下面的 C++ 程序,在 Ubuntu 上它里面有一个线程。
为什么需要两次 Ctrl+C 调用才能退出程序?
我注意到我向它发出的第一个 Ctrl+C 只会关闭 myThread。
注意:我确信 myThread 线程在第一个 Ctrl+C 后不复存在。这是我通过 ps aux 发现的。我只在第二个 Ctrl+C
之后得到打印 main_recv_sigint: Executed
在我的生产代码中,我正在执行 python 代码而不是 sleep 1000
如何让单个 Ctrl+C 完全关闭它?
#include <iostream>
#include <signal.h>
#include <thread>
#include <cstdlib>
#include "unistd.h"
#include <cstdio>
void *myThread(void *params)
{
std::string cmd = "sleep 1000";
if (system (cmd.c_str ()));
return NULL;
}
void main_recv_sigint (int sig);
bool runMainThread = true;
int main(int argc, char *argv[])
{
pthread_t threadID;
pthread_create(&threadID, NULL, myThread, NULL);
signal(SIGINT, main_recv_sigint);
while (runMainThread) {
while (runMainThread)
sleep(2);
if (!runMainThread)
break;
}
printf("Waiting for myThread() to exit\n");
pthread_join(threadID, NULL);
printf("Wait for myThread() exit done\n");
return 0;
}
void main_recv_sigint (int sig)
{
printf("main_recv_sigint: Executed\n");
runMainThread = false;
return;
}
【问题讨论】:
-
附带说明,如果您使用 pthreads,那么您应该包含声明 API 的标头。
-
确实不是个好主意 ` printf("main_recv_sigint: Executed\n"); ` 在信号处理程序中。
-
我明白了。我放置打印语句主要是为了能够调试这个..
标签: c++ multithreading pthreads signals