进程控制编程
来源:互联网 发布:linux cpu 超过100 编辑:程序博客网 时间:2024/06/05 07:28
进程与程序
进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制
进程是暂时的,程序使长久的:进程是一个状态变化的过程,程序可长久保存
进程与程序组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)
进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。
Linux中的进程包含3个段,分别为“数据段”、“代码段”和“堆栈段”。
“数据段”存放的是全局变量、常数以及动态数据分配的数据空间;
“代码段”存放的是程序代码的数据。
“堆栈段”存放的是子程序的返回地址、子程序的参数以及程序的局部变量等。
僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸。
僵尸进程产生的过程:
1. 父进程调用fork创建子进程后,子进程运行直至其终止,它立即从内存中移除,但进程描述符仍然保留在内存中(进程描述符占有极少的内存空间)。
子进程的状态变成EXIT_ZOMBIE,并且向父进程发送SIGCHLD 信号,父进程此时应该调用 wait() 系统调用来获取子进程的退出状态以及其它的信息。在 wait 调用之后,僵尸进程就完全从内存中移除。
因此一个僵尸存在于其终止到父进程调用 wait 等函数这个时间的间隙,一般很快就消失,但如果编程不合理,父进程从不调用 wait 等系统调用来收集僵尸进程,那么这些进程会一直存在内存中。
课堂练习:
/***************************************************************
File Name: 6.c
Author: 浮生流年
Function List: main() 主函数
Created Time: 2017年12月06日 星期三 14时39分59秒
**************************************************************/
#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<string.h>#include<stdlib.h>
void child_write(){ int fd, ret; char buf[100] = {0}; fd = open("test.txt", O_WRONLY | O_CREAT | O_EXCL, S_IRWXU); if(-1 == fd) { perror("open1"); exit(1); } while (1) { scanf("%s", buf); ret = write(fd, buf, strlen(buf)); if (-1 == ret) { perror("write"); exit(1); } if (!strncmp(buf, "end", 3)) //判断输入结束 { break; } memset(buf, 0, sizeof(buf)); }}
void parent_read(){ int fd, ret; char buf[100] = {0}; fd = open("test.txt", O_RDONLY); if (-1 == fd) { perror("open2"); exit(1); } while (1) { ret = read(fd, buf, sizeof(buf)); if (-1 == ret) { perror("read"); exit(1); } else if (0 != ret) //判断是否读到内容 { if (!strncmp(buf, "end", 3)) //当读到end时停止 { break; } printf("read from txt : %s", buf); } memset(buf, 0, sizeof(buf)); }}
int main(){ pid_t pid; pid = fork(); if (-1 == pid) { perror("fork"); exit(1); } else if (0 == pid)//子进程 { child_write(); } else //父进程 { parent_read(); } return 0;}
- 进程控制编程
- 进程控制编程
- 进程控制编程
- 进程控制编程
- 进程控制编程
- 进程控制编程预习
- linux进程控制编程
- 进程控制编程
- 进程控制编程
- 进程控制编程
- 进程编程控制
- 进程控制编程
- 进程控制编程
- Linux进程控制编程
- Linux进程控制编程
- Linux:进程控制编程
- Linux进程控制编程
- linux进程控制编程
- js中创建元素createElement\createTextNode\appendChild
- MATLAB中生成随机数方法总结
- shiro-03shiro的filterChainDefinitions
- UI5开发 – 解决Fiori LaunchPad不能加载Google API问题
- 打印_battery_status.scale
- 进程控制编程
- Java之Thread总结
- 无刷无霍尔BLCD电机控制
- 计算机网络系列(7)之应用场景Search engine
- 【拓扑+堆】BZOJ4010(HNOI2015)[菜肴制作]题解
- Android面试题
- Java集合框架上机练习题
- 实验二 交换机路由器基本配置--自我操作
- Java集合