首页 > 系统相关 >守护进程

守护进程

时间:2023-05-02 10:22:27浏览次数:31  
标签:loc value tm fd 进程 new include 守护

# 终端

 

 # 进程组

 

 

 

# 会话

 

 

 

# 守护进程

 

 

// 创建一个会话,每隔2s获取系统时间,并将时间写入到磁盘文件中

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

void handle(int num)
{

    time_t present_time = time(NULL);
    struct tm *loc = localtime(&present_time);
    // char buf[1024];
    // sprintf(buf, "%d-%d-%d %d:%d:%d\n", loc->tm_year, loc->tm_mon, loc->tm_mday,
    // loc->tm_hour, loc->tm_min, loc->tm_sec);



    // printf("%s\n", buf);
    int a_fd = open("/home/Linux/lesson22/a.txt", O_RDWR | O_CREAT | O_APPEND, 0777);
    write(a_fd, buf, strlen(buf));
    close(a_fd);

}


int main()
{
    // 创建子进程
    pid_t pid = fork();

    // 父进程退出
    if(pid > 0)
    {
        exit(0);
    }

    // 子进程创建会话
    setsid();
    //更改工作目录
    chdir("/");
    // 关闭、重定向文件描述符
    int fd = open("/dev/null", O_RDWR);

    dup2(fd, STDIN_FILENO);
    dup2(fd, STDOUT_FILENO);
    dup2(fd, STDERR_FILENO);

    struct sigaction act;
    act.sa_handler = &handle;
    act.sa_flags = 0;
    sigemptyset(&act.sa_mask);

    sigaction(SIGALRM, &act, NULL);




    struct itimerval new_value;
    new_value.it_interval.tv_sec = 2;
    new_value.it_interval.tv_usec = 0;
    new_value.it_value.tv_sec = 2;
    new_value.it_value.tv_usec = 0;


    setitimer(ITIMER_REAL, &new_value, NULL);

    while(1)
    {
        sleep(10);
    }






    return 0;
}

 

标签:loc,value,tm,fd,进程,new,include,守护
From: https://www.cnblogs.com/WTSRUVF/p/17367393.html

相关文章

  • linux进程的管理与调度
     进程的管理与调度是所有操作系统的核心功能。从内核的角度来看,进程是内核分配资源(CPU,Memory)的重要单元,是计算机用来管理这些资源的一种抽象。进程状态1、TASK_RUNNING表示进程要么正在执行,要么准备执行,等待cpu时间片的调度2、TASK_INTERRUPTIBLE表示进程被挂起(睡眠),直到......
  • Linux 进程调度之schdule主调度器
    考虑到文章篇幅,在这里我只讨论普通进程,其调度算法采用的是CFS(完全公平)调度算法。至于CFS调度算法的实现后面后专门写一篇文章,这里只要记住调度时选择一个优先级最高的任务执行一、调度单位简介1.1task_struct结构体简介对于Linux内核来说,调度的基本单位是任务,用structtask......
  • Android下结束进程的方法
    一、结束一个活动Activity要主动的结束一个活动Activity,使用finish方法,而且这个方法最后会调用Activity的生命周期函数onDestroy方法,结束当前的Activity,从任务栈中弹出当前的Activity,激活下一个Activity。当然其他的finish系列方法,我们不在这里做详细讨论,有兴趣的同学可以自......
  • 关闭占有某端口的进程
    我们都知道tomcat、JBoss等web容器默认端口为8080,之前在做javaweb项目的时候运行Jboss时发现8080端口被占用了,于是就去找究竟那个进程占用了该端口。Solution:netstat-ano|findstr8080-->"Enter"。tasklist/fi"PIDeq440"-->"Enter",这里/fi为筛选,"PIDeq440"为筛选条......
  • lab5:深入理解进程切换
    目录linux操作系统分析Lab5:深入理解进程切换context_switch函数执行过程1.prepare_task_switch()2.arch_start_context_switch()3.switch_mm_irqs_off()进程地址切换3.switch_to()实验总结linux操作系统分析Lab5:深入理解进程切换context_switch函数content_switch函......
  • HPL:多进程CPU性能测试
    使用HPL进行CPU性能测试CPU型号为:AMDRyzen75800H,本次实验使用两台Linux虚拟机测试,每个虚拟机分配一个CPU。理论浮点峰值=CPU主频×CPU核数×CPU每周期执行浮点运算的次数本机CPU的基准频率为3.2GHZ,加速频率为4.4GHZghz。CPU有8核16线程(一个核虚拟成2个CPU),CPU单个周期浮点计算......
  • 14 进程的等待与唤醒机制
    进程的等待结构:kwlst_t结构用于挂载等待的进程;经常被包含在信号量等结构,是用于保护访问受限的贡献资源;进程等待:krlsched_wait函数:获取当前正在运行的进程,设置进程状态为等待状态,执行脱链操作,并将进程加入等待结构;进程唤醒:krlsched_up函数:从等待数据结构中获取进程,然后设置......
  • Cygwin、MSYS2 Bash封装函数restart,重启Windows程序进程向导,输入序号一键重启对应进程
    概述作用:终端输入restart,根据菜单提示输入序号重启特定的软件或进程,定义的重启函数太多不便于记忆的情况,特别是手机远程终端(如:JuiceSSH)连接的情况下,减少手动输入和误操作,其中判定浏览器进程使用了另一篇文章中预定的函数wmicps,ps2为指向wmicps的alias(详见:https://www.cnblog......
  • 14 进程调度
    进程调度的原因:一是CPU同一时刻只能运行一个进程,并且CPU的个数总是少于进程个数,就需要让进程共用一个CPU;二是当一个进程拿不到资源时就应该让出CPU,否则会一直霸占CPU;1、管理进程:进程的生命周期:进程的状态:运行、睡眠、等待、新建、僵死;组织进程:设计思想:链表数据结构,一个优......
  • 【协程】进程,线程和协程
    进程进程,描述的是程序的执行过程,是运行着程序的代表,在操作系统中,每个进程的内存空间都是独立的,使用多进程并发有两个缺点:一是内核的管理成本高,而是无法简单地通过内存同步数据(进程运行的虚拟内存空间),很不方便,于是多线程模式就出现了。线程线程是操作系统能够运行运算调度的最......