c - SIGCONT按预期在父进程上工作

  • 本文关键字:进程 工作 SIGCONT c signals
  • 更新时间 :
  • 英文 :


我需要父进程停止,直到子进程向它发送唤醒信号。只有在从子进程获得唤醒信号后,父进程才需要继续执行其余的代码。

我已经完成了以下操作,但是父进程只显示printf语句,不接受输入。请注意,我的输入是一个字符串。不确定为什么父进程不接受任何输入,也不显示最终的打印结果。如有任何建议,不胜感激。

#include <stdio.h>
#include <stdlib.h>     // EXIT_FAILURE
#include <unistd.h>     // for fork
#include<sys/wait.h>    // for wait
#include <signal.h>     // for sa_handler
#define SIZE 100    // maximum characters allowed in the chat
int main(){
char ptr[100] = "";

pid_t pid = fork(); // fork a processes
if(pid < 0){
perror("Fork #1 failed..n");
exit(EXIT_FAILURE);
}
else if (pid > 0){  // Parent Process
raise(SIGSTOP);
printf("Please enter message...n");

fgets(ptr, SIZE, stdin);

printf("Parent Message: 33[0;31m%sn", ptr);      // RED color font
}
else {          // Child A
sleep(2);           
kill(getppid(), SIGCONT);   

exit(0);
}
wait(NULL);

return 0;
}

当您触发SIGSTOP时,终端的控制权将返回到shell,因此您键入的任何输入都将转到shell。因此,您的原始进程正在挂起fgets调用。

您可以在shell中运行fg来验证这一点。这将前台的背景进程,然后你可以输入输入。

如果不知道你想要完成的是什么,就很难提出建议。在我看来,信号不是一种理想的IPC(进程间通信)方法。我喜欢使用pipe进行相关的进程同步。也就是说,您创建一个管道,调用fork,让每个进程关闭相应的端,然后执行"信令"。当一个进程想要给另一个进程发信号时,它关闭写端。另一个进程同时在读端调用poll/select,以便它知道写端何时关闭。

相关内容

  • 没有找到相关文章

最新更新