linuxIO进程

本文介绍了Linux中用于进程退出的exit和_exit函数,包括它们的区别,如缓冲区处理和调用类型。wait和waitpid函数用于父进程等待子进程结束,分别支持阻塞和非阻塞方式。此外,文章还详细讲解了如何创建守护进程,涉及setsid、chdir、umask以及关闭文件描述符等关键步骤。
摘要由CSDN通过智能技术生成

进程的系统调用函数接口:

exit函数

函数功能:退出进程,库函数调用

函数使用需要添加的头文件

#include <stdlib.h>

函数的原型

void exit(int status);

函数的参数说明

status:进程退出的状态值

0表示进程正常结束

其他值表示其他结果结束

函数的返回值说明

该函数无返回值

_exit函数

函数功能:退出进程,系统调用函数

函数使用需要添加的头文件

#include <unistd.h>

函数的原型

void _exit(int status);

函数的参数说明

status:进程退出的状态值

0表示进程正常结束

其他值表示其他结果结束

函数的返回值说明

该函数无返回值

exit和_exit函数的区别:

1. 一个是系统调用,一个是库函数调用

2. _exit函数在结束进程的时候不会刷新缓冲区内容

3. exit函数在结束进程的时候将会刷新缓冲区的内容

wait函数

函数功能:进程阻塞等待子进程结束

函数使用需要添加的头文件

#include <sys/types.h>

#include <sys/wait.h>

函数原型

pid_t wait(int *wstatus);

函数参数说明

wstatus:用指针来获取子进程退出的状态值

如果该参数指定为NULL,表示不关心子进程退出

的状态值

函数返回值说明

成功:返回退出进程的进程id

失败:返回-1

waitpid函数

函数功能:处理子进程结束

函数使用需要添加的头文件

#include <sys/types.h>

#include <sys/wait.h>

函数原型

pid_t waitpid(pid_t pid, int *wstatus,

int options);

函数参数说明

1.pid:

>0:等待处理指定进程id的子进程

-1:等待任意子进程退出,效果同wait

<-1:等待组id和pid绝对值相同的任一子进程

==0:等待其组ID等于调用进程的组ID的任一子

进程

2.wstatus:效果同wait函数,接收子进程退出的状

态值

3.options:

0:阻塞等待进程结束,效果同wait函数

WNOHANG:非阻塞处理子进程退出

如果没有子进程退出waitpid函数会立即

返回

如果子进程退出则处理子进程产生的资源

函数返回值说明

成功:

退出的子进程id

当option参数指定为WNOHANG:没有子进程退

出将返回0,有子进程退出则返回退出的子进程的id

失败:

-1

守护进程

在Linux系统启动的时候就会开始运行的进程,当系统关

闭时该进程才会结束,实际工作为周期性的完成某些特

定操作

daemo守护进程:不属于某个终端,也是一个后台进程

守护进程编写流程

1.创建子进程,父进程退出,子进程将变为

后台进程

2.摆脱终端,创建一个新的会话组,并使得

该子进程成为该会话组的组长

setsid函数

函数的功能:创建一个新的会话组,并使得调用该函数的进

程成为该会话组的组长

函数使用需要添加的头文件

#include <sys/types.h>

#include <unistd.h>

函数原型:

pid_t setsid(void);

函数参数说明:

该函数不需要传递参数

函数返回值说明:

成功:返回会话组id

失败:返回-1

3.改变该子进程的工作目录,建议修改为根

目录

chdir函数

函数的功能:创建一个新的会话组,并使得调用该函数的进

程成为该会话组的组长

函数使用需要添加的头文件

#include <sys/types.h>

#include <unistd.h>

函数原型:

pid_t setsid(void);

函数参数说明:

该函数不需要传递参数

函数返回值说明:

成功:返回会话组id

失败:返回-14. 重设文件掩码

umask函数

5. 关闭所有的已打开文件描述符

getdtablesize函数

函数的功能:改变工作目录

函数使用需要添加的头文件

#include <unistd.h>

函数原型:

int chdir(const char*path);

函数参数说明:

path:修改的目录文件的文件路径

函数返回值说明:

成功:0

失败:-1,并且设置错误号

4. 重设文件掩码

umask函数

函数的功能:改变工作目录

函数使用需要添加的头文件

#include <unistd.h>

函数原型:

int chdir(const char*path);

函数参数说明:

path:修改的目录文件的文件路径

函数返回值说明:

成功:0

失败:-1,并且设置错误号

函数的功能:重设文件掩码

函数使用需要添加的头文件

#include <sys/stat.h>

#include <sys/types.h>

函数原型:

mode_t umask(mode_t mode);

函数参数说明:

mode:重设的文件掩码的值

函数返回值说明:

该函数调用通常都是成功的,返回的是重设的文件掩

码值

5. 关闭所有的已打开文件描述符

getdtablesize函数

函数功能:获取打开的文件描述符数量

函数使用需要添加的头文件

#include <unistd.h>

函数原型:

int getdtablesize(void);

函数参数说明:

该函数不需要传递参数

函数返回值说明:

成功:已打开的文件描述符数

失败:-1,并且设置错误号

6. 守护进程相关功能

时间相关函数:

time:获取当前系统时间

localtime:获取显示时间的结构体

函数使用需要添加的头文件

#include <time.h>

函数原型:

struct tm *localtime(const time_t

*timep);

函数参数说明:

timep:系统时间

函数返回值说明:

成功:返回描述时间的结构体指针

失败:返回NULL

时间结构体说明

struct tm

{

int tm_sec; /* Seconds (0-60) */

int tm_min; /* Minutes (0-59) */

int tm_hour; /* Hours (0-23) */

int tm_mday; /* Day of the month

(1-31) */

int tm_mon; /* Month (0-11) */

int tm_year; /* Year - 1900 */

int tm_wday; /* Day of the week

(0-6, Sunday = 0) */

int tm_yday; /* Day in the year

(0-365, 1 Jan = 0) */

int tm_isdst; /* Daylight saving

time */

};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值