进程基础-进程的创建、管理与调度、终止
来源:互联网 发布:怎么查淘宝热卖数据 编辑:程序博客网 时间:2024/05/19 11:49
进程有三种状态:就绪、执行、阻塞。
一、进程操作
1、进程的创建
程序可通过getpid()函数获取自身所运行的进程的ID,也可以通过getppid()获取父进程ID。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
//printf("test\n");
printf("getpid:%d\n",(int)getpid());
printf("getppid:%d\n",(int)getppid());
return 0;
}
进程的创建有system()和fork()函数。
函数原型:pid_t fork()
一个进程通过调用fork会创建一个被称为子进程的副本进程,这个子进程和父进程不同的地方只有进程的ID,其他都是一样的,因此要保存这个子进程的ID。子进程创建后,父子进程一起从调用fork()函数的地方继续执行,竞争系统资源。
若创建失败,则fork返回-1;若子进程创建成功,则fork函数在子进程中返回0,在父进程中返回子进程ID.
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
pid_t child_pid;
child_pid = fork();
if(child_pid > 0)
printf("father id:%d,child id:%d\n",getpid(),child_pid);
else if(child_pid == 0)
printf("child id :%d\n", getpid());
else
printf("create process failed\n");
return 0;
}
运行结果:
father id:2899,child id:2900
child id :2900
2、进程的管理与调度
linux内核有一个进程控制表(Process Table),此表中的每一项都是一个task_struct结构,即代表一个进程。task_struct结构中有对应进程的优先级字段,进度调度器根据优先级的值,选择最迫切需要运行的就行进程来执行。
管理最好的办法是命令:(1)ps -aux
3、进程的终止
子进程一经创建,即与父进程一起被系统调度。子进程运行完毕后,并不立即释放所占用的进程控制表项,而是作为前面提到的僵进程存在与系统中。直至父进程正常退出或调用wait函数,子进程才彻底终止。
pid_t wait(int *status)
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
pid_t child_pid, pid;
child_pid = fork();
int status = 0;
if(child_pid > 0){
printf("father id:%d,child id:%d\n",getpid(),child_pid);
pid = wait(&status);
printf("child process finished pid:%d\n",child_pid);
}
else if(child_pid == 0)
printf("child id :%d\n", getpid());
else
printf("create process failed\n");
return 0;
}
运行结果:
father id:3486,child id:3487
child id :3487
child process finished pid:3487
调用了wait函数的父进程会马上阻塞自己,由wait函数自动分析是否当前进程的某个子进程已经退出,如果找到了这样一个已经变成僵进程的子进程,wait函数就会搜集这个子进程的信息,将它彻底终止并返回子进程结束状态值;如果没有找到这样一个子进程,wait函数就会一直阻塞在这里,直到出现一个变成僵进程的子进程为止。
类似的还有 pid_t waitpid(pid_t pid, int *status, int options);
可以通过命令kill终止。
- 进程基础-进程的创建、管理与调度、终止
- 进程的管理与调度
- 【进程管理】进程的调度与切换
- OS之 进程的创建与终止
- 进程调度与管理
- fork()&&进程的创建与终止--多进程编程
- Linux下进程的创建过程分析(_do_fork/do_fork详解)--Linux进程的管理与调度
- VC进程的创建、终止
- Linux进程管理之进程的终止
- Linux进程管理之进程的终止
- 内核的进程管理与调度
- Linux进程的管理与调度
- 我的文档:进程管理与调度
- linux进程管理与调度
- linux进程管理与调度
- Linux进程管理与调度
- linux进程管理与调度
- linux进程管理与调度
- Java Web 的servlet 之过滤器 filter
- case: 初始化操作由case标签跳过 错误解决办法:加{}
- 下拉树编辑风格 - 报表系统
- 基本套接字编程(1) -- tcp篇
- 第四章--INI配置
- 进程基础-进程的创建、管理与调度、终止
- Android入门教程 Activity生命周期
- unity3d-准备工作 - VS2013
- c语言
- 《sed & awk》读书笔记之 awk 篇
- 设计模式C++实现--享元模式
- 关于Codis的动态扩容
- nginx扩展模块,不能正常显示FastDfs上传的图片问题
- Application中定义公用数据