【发布时间】:2019-04-11 02:51:19
【问题描述】:
我将很快写出我想用我的代码做什么以及真正的输出是什么。 我有一个创建两个子进程的父进程。这两个进程中的每一个都从不同的文件中读取 100 个字节,子 1 从“child1.txt”读取,子 2 从“child2.txt”读取。我想通过使用信号强制在孩子 1 之前执行孩子 2。
我创建了两个子进程并暂停了它们(当它们收到信号时暂停结束)。所以我向孩子 2 发送了一个信号,然后我向孩子 1 发送了一个信号。这样我希望他们会做我想做的事,但他们不会(它总是显示 child1.txt 内容)而且我不明白为什么。
这是代码
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <fcntl.h>
#include <wait.h>
void my_handler(int signo);
int main(int argc, char *argv[]){
signal(SIGCHLD,my_handler);
pid_t pid[2]; //here is where I save child pid
char buffer[100];
for (int i=0;i<2;i++){
if((pid[i]=fork())==0){
signal(SIGUSR1,my_handler);
int fd,nbyte;
pause();
if(i==0){
fd=open("Child1.txt",O_RDONLY);
}else{
fd=open("Child2.txt",O_RDONLY);
}
nbyte=read(fd,buffer,100);
buffer[nbyte-1]='\0';
write(STDOUT_FILENO,buffer,strlen(buffer));
exit(1);
}
sprintf(buffer,"Child %d\n",(int)pid[i]);
write(STDOUT_FILENO,buffer,strlen(buffer));
}
kill(pid[1],SIGUSR1); //I send a signal to unpause child2
wait(NULL); // wait child 2 to terminate
kill(pid[0],SIGUSR1); //unpause child 1
wait(NULL); // wait child 1 to terminate
}
void my_handler(int signo){
}
【问题讨论】:
标签: c linux unix signals parent-child