问题描述
- 一个小的Linux程序,一运行电脑就自动关机。(要求两个进程轮流打印1.2.3.4....)
-
#include
#include
#include
#include
#includevoid f_sigact(int num)
{
static int f = 2;
// sleep(1);
printf("I am father.This is %dn",f);
f += 2;
}void c_sigact(int num)
{
int static c = 1;
// sleep(1);
printf("I am child.This is %dn",c);
c+=2;
}int main()
{
pid_t fpid,cpid;
struct sigaction fact,cact;
fact.sa_handler = f_sigact;
cact.sa_handler = c_sigact;
// sigemptyset(&fact.sa_mask);
// sigaddset(&fact.sa_mask,SIGUSR2);
fact.sa_flags = 0;
// sigaction(SIGUSR1,&fact,NULL);
// sigemptyset(&cact.sa_mask);
sigaddset(&cact.sa_mask,SIGUSR1);cact.sa_flags = 0;
sigaction(SIGUSR2,&cact,NULL);fpid = fork(); if(fpid < 0){ perror("fork"); exit(1); } int m = 5; while(1){ if(fpid > 0){ kill(fpid,SIGUSR2); // sleep(1); } else{ cpid = getppid(); kill(cpid,SIGUSR1); // sleep(1); } sleep(3); } return 0;
}
解决方案
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void f_sigact(int num)
{
static int f = 2;
// sleep(1);
printf("I am father.This is %dn",f);
f += 2;
}
void c_sigact(int num)
{
int static c = 1;
// sleep(1);
printf("I am child .This is %dn",c);
c+=2;
}
int main()
{
pid_t fpid,cpid;
struct sigaction fact,cact;
struct sigaction ofact,ocact;
fact.sa_handler = f_sigact;
cact.sa_handler = c_sigact;
// sigemptyset(&fact.sa_mask);
// sigaddset(&fact.sa_mask,SIGUSR2);
fact.sa_flags = 0;
cact.sa_flags = 0;
// sigaction(SIGUSR1,&fact,NULL);
// sigemptyset(&cact.sa_mask);
sigaddset(&cact.sa_mask,SIGUSR1);
sigaddset(&fact.sa_mask,SIGUSR2);
//sigaction(SIGUSR2,&cact,NULL);
cpid = fork();
if(cpid < 0){
perror("fork");
exit(1);
}
else if (cpid==0){
//it's a child
sigaction(SIGUSR1,&cact,&ocact);
}
else{
//it;s the parent
sigaction(SIGUSR2,&fact,&ofact);
}
int m = 5;
sleep(1);
while(1){
if (cpid>0)
{
fpid = getpid();
kill(cpid,SIGUSR1);
sleep(1);
kill(fpid,SIGUSR2);
sleep(1);
}
sleep(3);
}
return 0;
}
解决方案二:
太感谢了~~昨晚想了好长时间!
时间: 2024-09-23 17:31:56