使用信号的多进程应用程序。
一个。父进程应创建两个子进程,分别创建和取消链接文件。
湾父进程应注册SIGUSR1和SIGUSR2。这些信号可以从另一个终端的命令行发送给父节点。
℃。如果用户将SIGUSR1从另一个终端发送给父节点,则父节点应该将此信号发送给子节点1.子节点1应该创建一个文件。
d。如果用户将SIGUSR2从另一个终端发送给父节点,则父节点应该将此信号发送给子节点2.子节点2应取消该文件的链接
请任何人帮助我如何使用c语言解决这个程序?
提前致谢
答案 0 :(得分:0)
只需将您的子进程PID保留在父进程中
使用signal(SIGUSR1, &sig_handler);
(man 2信号)拦截父母的信号
然后在你的2个sig_handler中,使用kill(child_pid, SIGUSRX);
(man 2 kill)
在您的孩子中,再次使用signal(),并创建适当的处理程序(他们将创建文件等)
答案 1 :(得分:0)
试试这个程序,这将解决您的需求。
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<fcntl.h>
int parent;
int pid_1;
int pid_2;
void signal_handler1(int signo)
{
int pid=getpid();
if(signo == SIGUSR1)
{
if(pid == parent)
kill(pid_1,SIGUSR1);
if(pid == pid_1)
{
int fd=open("/tmp/test",O_CREAT,0755);
close(fd);
}
}
if(signo == SIGUSR2)
{
if(pid == parent)
kill(pid_2,SIGUSR2);
if(pid == pid_2)
unlink("test");
}
}
main()
{
parent=getpid();
signal(SIGUSR1,signal_handler1);
signal(SIGUSR2,signal_handler1);
if((pid_1=fork()) <-1)
exit(0);
else if(pid_1 == 0)
pid_1=getpid();
else
{
if((pid_2=fork()) <-1)
exit(0);
else if(pid_2 == 0)
pid_2=getpid();
}
while(1)
{
}
}