守护进程相关

一:守护进程

守护进程与后台进程区别:

  • 守护进程与终端不挂钩,后台进程与终端挂钩(会往终端输出信息)
  • 守护进程不因终端的状态所改变,始终在后台运行,后台进程会随终端的关闭而关闭

二:编写脚本判断程序是否在运行

#include <stdio.h>
#include <string.h>

int main()
{
	FILE *file;
	char *cmd = "ps -elf | grep douyin | grep -v grep";  //查看进程是否存在并且-v可以过滤掉    
                                                       //grep的这个进程,以防下面的判断误判
	char buffer[128] = {'\0'};

	file = popen(cmd,"r");   //popen可以将查看的内容打印出来显示
	fgets(buffer,128,file);
	if(strstr(buffer,"douyin") != NULL){
		printf("douyin pro is running\n");
	}else{
		printf("douyin pro is not runing\n");
	}
	printf("BUFFER:%s\n",buffer);

	return 0;
}

二:将守护进程与脚本结合,实现程序不会被关闭

#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <time.h>
#include <stdio.h>
#include <stdbool.h>

static bool flag = true;

void handler(int sig)
{
    printf("I got a signal %d\nI am quitting\n",sig);
    flag = false;
}

int judMnt()
{
    FILE *file;
    char *cmd = "ps -elf | grep douyinpro | grep -v grep";
    char buffer[128] = {'\0'};

    file = popen(cmd,"r");
    fgets(buffer,128,file);
    if(strstr(buffer,"douyin") != NULL){
        return 0;
    }else{
        return -1;
    }
    printf("BUFFER:%s\n",buffer);

}

int main()
{
    time_t t;
    int fd;

    if(-1 == daemon(0,0)){
        printf("daemon error\n");
        exit(-1);
    }

    struct sigaction act;
    act.sa_handler = handler;
    sigemptyset(&act.sa_mask);
    act.sa_flags = 0;
    if(sigaction(SIGQUIT,&act,NULL)){
        printf("sigaction error\n");
        exit(0);
    }

    while(flag){
        if(judMnt() == -1){
            system("/home/orangepi/hardwareSoft/douyin/douyinpro /dev/ttyS5 &"); //发送指 
                                                     //令查看进程是否还在运行,若没有则开启
                                                    //加&表示是在后台运行
        }

        sleep(2);
    }

    return 0;
}
                          

sudo vi /etc/rc.local
在里面加入守护进程的绝对路径(pwd),开机会自启动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值