使用信号的多进程应用程序

时间:2014-07-30 09:41:49

标签: c

使用信号的多进程应用程序。

一个。父进程应创建两个子进程,分别创建和取消链接文件。

湾父进程应注册SIGUSR1和SIGUSR2。这些信号可以从另一个终端的命令行发送给父节点。

℃。如果用户将SIGUSR1从另一个终端发送给父节点,则父节点应该将此信号发送给子节点1.子节点1应该创建一个文件。

d。如果用户将SIGUSR2从另一个终端发送给父节点,则父节点应该将此信号发送给子节点2.子节点2应取消该文件的链接

请任何人帮助我如何使用c语言解决这个程序?

提前致谢

2 个答案:

答案 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)
    {
    }
}