linux编程-一个小的Linux程序,一运行电脑就自动关机。(要求两个进程轮流打印1.2.3.4....)

问题描述

一个小的Linux程序,一运行电脑就自动关机。(要求两个进程轮流打印1.2.3.4....)

#include
#include
#include
#include
#include

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;
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

linux编程-一个小的Linux程序,一运行电脑就自动关机。(要求两个进程轮流打印1.2.3.4....)的相关文章

android-Android中调用一个小的计时程序?

问题描述 Android中调用一个小的计时程序? 这个程序有对应的Timer_layout.xml,这个布局文件以include的方式放在另外一个xml文件中, 现在想在MainActivity中调用Timer.java中的按钮计时方法,请问怎么调用呀? public class Timer extends Activity implements View.OnClickListener{ <声明部分> protected void onCreate(Bundle savedInstanceS

linux编程-大菜鸟求教linux,想用c写一个helloworld不知从哪里下手,零基础伤不起啊,求大神指点。

问题描述 大菜鸟求教linux,想用c写一个helloworld不知从哪里下手,零基础伤不起啊,求大神指点. 解决方案 用apt安装gcc,用vim或者任意的编辑器创建源代码,用gcc编译. 解决方案二: 红帽啊?没用红帽,只用ubuntu,不过应该都差不多吧,打开终端,然后进入相应的目录,通过vim新建文件进行编辑 解决方案三: 进入终端,用vi创建一个.c文件,在里边用c语言写个程序,运行即可

用VBS调用程序并对程序的运行情况进行监控的两个代码_vbs

有同时要用一个CAE软件调用外部程序,但是,通过这个CAE软件调用外部程序以后,因为这个外部程序有参数,调用方法写在Bat文件里的,由CAE软件来调用这个Bat,所以,CAE软件没办法对调用的程序进行监控,调用的程序还在运行当中,准备工作还没完成,就到了下一流程,所以,造成流程出错,我写了两个VBS代码,通过它来调用就解决了这个问题!两个小程序分别是按不同的方式来监控的!    两个程序的调用方式不一样,一个是对系统进程进行监控,一个是对程序生成的文件特征进行监控! 第一个: '该程序用来配合S

TCP/TP编程 - 一个简单的Linux下C写的socket服务器客户端程序

服务端: hello_server.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> void error_handling(char *message); int main(int argc, char *argv[]) { in

如何制作一个小LINUX

要制作一个小的Linux,我们就要了解Linux系统开机的整个过程,其实很简单,跟WIN差不多. POST(BIOS加电自检)-->根据BIOS的设定启动相应的设备-->Boot loader -->解压内核到内存 -->运行init进程 整个过程大概如上所述. 其中,内核在加载的过程中所完成的工作包括以下: 硬件探测 完成设备驱动程序初始化(initrd获取驱动程序,以模块的形式存在) 挂载根文件系统(以只读方式挂载) 装载/sbin/init,启动系统的PID为1的进程 系统的

《Linux C编程从入门到精通》一第1章 Linux基础1.1 Linux的起源、发展和分类

第1章 Linux基础 Linux C编程从入门到精通 Linux是一套免费使用和自由传播的类UNIX操作系统,它已发展成为现今世界上最流行的一种操作系统.Linux不仅仅能在PC机上运行,随着嵌入式系统的发展,它已经被广泛地应用于各种场合. 1.1 Linux的起源.发展和分类 Linux C编程从入门到精通 Linux从1991年问世到现在已经有20多年的历史,它从一个架构简单的系统内核发展到了现在结构完整.功能丰富的多版本操作系统,本小节将介绍其起源发展和分类. 1.1.1 Linux的起

linux作为防火墙,编一个小程序,实现我选择一个ip , 就显示这个ip的上网历史记录! 大家说说吧!linux作为防火墙

问题描述 linux作为防火墙,编一个小程序,实现我选择一个ip,就显示这个ip的上网历史记录!大家说说吧!要是非要安装软件的话,最好是linux自带的或是开源的.

网络编程-用socket写了个linux聊天的小程序,一客户端一直输出接受消息成功 ==

问题描述 用socket写了个linux聊天的小程序,一客户端一直输出接受消息成功 == //服务器端代码 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<mallo

linux网络编程-linux方面遇到的一个难题,希望大哥大姐帮忙解决下,小弟是菜鸟,刚学linux编程

问题描述 linux方面遇到的一个难题,希望大哥大姐帮忙解决下,小弟是菜鸟,刚学linux编程 /proc/进程号/statm包含了进程使用内存的信息,如[root@cs 9519]# more statm 18095 2094 1468 7 0 605 0 [root@cs 9519]# ps 9519PID TTY STAT TIME COMMAND9519 ? S 0:00 /usr/libexec/notification-daemonmore statm 18095 2094 1468