delphi pid判断进程结束_linux守护进程的创建

/*===============================================

* 文件名称:protectprocess.c //守护进程

* 创 建 者:追光者

* 创建日期:2020年11月01日

* 描 述:创建守护进程将当前系统时间写入test.txt中。

创建步骤:

  1. 用fork函数创建进程并退出父进程
  2. 在子进程内用setsid函数创建会话期
  3. 用chdir函数更改文件目录
  4. 用umask函数设置文件权限掩码,利于文件权限的灵活性
  5. 关闭文件描述符,避免占用内存或者避免内存数据混乱

具体程序如下:

================================================*/

#include <stdio.h>

#include <unistd.h>

#include <sys/types.h>

#include <stdlib.h>

#include <fcntl.h>

#include <sys/stat.h>

#include <string.h>

#include <strings.h>

#include <time.h>

int main()

{

//创建进程

pid_t pid;

if((pid = fork()) < 0)

{

perror("fork");

return -1;

}

else if(pid>0){

exit(0);//关闭父进程

}

//在子进程里创建会话期

if(setsid()<0){

perror("setsid");

return -1;

}

//改变工作路径

if(chdir("/tmp")<0){

perror("chdir");

return -1;

}

//设置掩码权限,使文件权限更加灵活

umask(0);

//定义变量关闭文件描述符个数

int i =0;

int tablesize = getdtablesize();//getdtablesize()函数是获取文件描述符个数。

for(i=0;i<tablesize;i++)

close(i);

int fd = open("test1.txt",O_RDWR | O_CREAT,0640);//创建文件描述符

if(fd<0){ //判断是否创建成功

perror("open");

return -1;

}

int cnt=0; //行数计数初始化

char buf[32]={0}; //缓冲区定义

while(read(fd,buf,32)){ //将缓冲区32字节大小数据读入文件

int i=0;

while(i<32){

if(buf[i] == 'n') //当读到'n'时计数

cnt++;

i++;

}

bzero(buf,sizeof(buf)); //没读一次需进行数据清零操作避免造成数据黏合问题

}

while(1){

char buf[32]={0};

sprintf(buf,"%d ",cnt++);//将cnt计数写入buf内

struct tm *p; //结构体指针

time_t now;

time(&now);

p = localtime(&now); //获取系统时间

sprintf(buf," %4d-%02d-%02d %02d:%02d:%02dn",p->tm_year+1900,p->tm_mon+1,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);

if(write(fd,buf,strlen(buf))) //如果写入数据则结束循环

break;

}

close(fd);

return 0;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值