linux进程
来源:互联网 发布:怎么样入驻淘宝达人 编辑:程序博客网 时间:2024/04/29 21:28
unistd.h 是 C 和 C++ 程序设计语言中提供对 POSIX 操作系统 API 的访问功能的头文件。对于类 Unix 系统,unistd.h 中所定义的接口通常都是大量针对系统调用的封装(英语:wrapper functions),如 fork、pipe 以及各种 I/O 原语(read、write、close 等等)。
sys/types.h中文名称为基本系统数据类型。在应用程序源文件中包含 <sys/types.h> 以访问 _LP64 和 _ILP32 的定义。此头文件还包含适当时应使用的多个基本派生类型。尤其是以下类型更为重要:
caddr_t 核心地址。
clock_t 表示系统时间(以时钟周期为单位)。
comp_t 压缩的时钟滴答。
dev_t 用于设备号。
fd_set 文件描述集。
fpos_t 文件位置。
gid_t 数组值ID。
ino_t i节点编号。
off_t 用于文件大小和偏移量。
mode_t 文件类型,文件创建模式。
pid_t进程ID和进程组ID
ptrdiff_t 是一种带符号整型,用于对两个指针执行减法运算后所得的结果。
rlim_t 资源限制;
size_t 反映内存中对象的大小(以字节为单位)。
ssize_t 供返回字节计数或错误提示的函数使用。
time_t 以秒为单位计时。
uid_t 数值用户ID。
wchar_t 能表示所有不同的字符码。
所有这些类型在 ILP32 编译环境中保持为 32 位值,并会在 LP64 编译环境中增长为 64 位值。
一、启动一个新进程Fork创建新的进程。新进程几乎与原进程一模一样的,执行的代码也完全相同,但新进程有自己的数据空间、环境和文件描述符。
代码如下:
#include <sys/types.h>#include <unistd.h>#include <stdio.h>int main(){pid_t pid;char * message;int n;printf("fork program starting\n");pid = fork();switch(pid){case -1: perror("fork failed"); exit(1);case 0: message = "This is the child"; n = 5; break;default: message = "This is the parent"; n = 3; break;}for(; n > 0; n--) {puts(message);sleep(1);}exit(0);}
执行结果如下:
二、等待一个进程
wait系统调用将暂停父进程直到它的子进程结束为止。这个调用返回子进程的PID,它通常是已经结束运行的子进程的PID。
sys/wait.h 文件中包含了一些宏,WIFEXITED(stat_val) 表示 如果子进程正常结束,它就取一个非零值。WEXITSTATUS(stat_val)表示如果WIFEXITED非零,它返回子进程的退出码。
代码如下:
#include <sys/types.h>#include <sys/wait.h>#include <unistd.h>#include <stdio.h>int main(){pid_t pid;char * message;int n;int exit_code;printf("fork program starting \n");pid = fork();switch(pid){case -1: perror("fork failed"); exit(1);case 0: message = "This is the child"; n = 5; break;default: message = "This is the parent"; n = 3; break;}for(; n > 0; n--) {puts(message);sleep(1);}// 此部分等待子进程完成if(pid != 0) {int stat_val;pid_t child_pid;child_pid = wait(&stat_val);printf("Child has finished: PID = %d\n", child_pid);if(WIFEXITED(stat_val))printf("Child exited with code %d\n", WEXITSTATUS(stat_val));elseprintf("Child terminated abnormally\n");}printf("before exit\n");exit(exit_code);}
执行结果如下:
第一个"before exit"由子进程打印,第二个“before exit”由父进程打印。
三、僵尸进程
个进程在调用exit命令结束自己的生命的时候,其实
linux中的僵尸进程
在Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,
子进程终止时,它与父进程之间的关联还会保持,直到父进程也正常终止或父进程调用wait才告结束。因此,进程表中代表子进程的表象不会立刻释放。虽然子进程已经不再运行,但它仍然存在与系统中,因为它的退出码还需要保存起来以备父进程今后的wait调用使用。这是它将成为一个僵尸进程。
- Linux--进程--僵尸进程
- linux 进程
- linux 进程
- Linux 进程
- Linux进程
- LINUX进程
- Linux进程
- Linux进程
- Linux进程
- linux进程
- Linux进程
- 进程-Linux
- linux-进程
- Linux进程
- linux 进程
- linux进程
- linux进程
- Linux进程
- GamingAnywhere 一:GA初览
- 空白的视图
- VC++学习心得系列
- Eclipse小缺陷及规避方法积累
- 走进JAVA虚拟机(二)-------Java虚拟机的内存管理
- linux进程
- Meteor 实现文件下载
- [HDU 2068] RPG的错排 (错排问题)
- 重运算符用成员函数还是友元函数
- 【算法】最小生成树prim算法
- 我的vim配置和对应的插件
- android实现uc和墨迹天气那样的左右拖动效果
- QT下定时关机程序!
- 嵌入式 一个进程获取另一个指定名称进程的PID