gpt4 book ai didi

c - 提高 SIGINT,但卡在 c 中的线程中

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:04 26 4
gpt4 key购买 nike

我正在做一个利用线程的程序。我还有一个 SIGINT 处理程序,可以正确关闭所有内容,以便有序关闭。但是,由于我的线程处于 while(1) 循环中,我的处理程序中的 pthread_join 函数卡住了,我必须按 ctrl+c很多次,单独关闭每个线程。我怎样才能一键做到这一点?这是我的线程工作函数:

void *worker(){
struct message msg;
while(1){
if(wr.fnode != NULL){
sem_wait(&tsem);
stats->nptri++;
msg.patient = *(wr.fnode);
wr_deletefnode();
sem_post(&tsem);
sleep((float)(msg.patient.ttime/1000));
msgsnd(mqid,&msg,sizeof(msg)-sizeof(long),0);
}
}
}

最佳答案

这取决于您如何将信号(SIGINT 或任何)发送到线程。要向线程发送信号,您应该使用 pthread_kill() 而不是 kill()raise() 因为信号处理程序(signal或 sigaction) 只处理进程,不处理线程

 int pthread_kill(pthread_t thread, int sig);

如果您曾尝试使用 kill 命令/函数来终止正在运行的线程,操作系统将发出类似 Warning: Program '/bin/bash' crashed 的警告。

使用 ps -eL | 观察正在运行的线程 | grep pts/0 发送信号前后。

希望你有所收获。

关于c - 提高 SIGINT,但卡在 c 中的线程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47735756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com