多进程实现

一、进程三种状态

1.就绪状态(Ready)

当进程已分配到除CPU以外的所有必须的资源,只要获得处理机便可以立即执行,这时的进程状态就被称为就绪状态。

2. 执行状态(Running)

当进程已获得CPU,其程序正在CPU上执行,此时的进程状态被称为执行态。

3. 阻塞状态(Blocked)

又称为等待、挂起状态。
正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件有很多种,例如,等待I/O完成、申请缓存区不能满足、等待条件(信号)等。

4. 状态转换

在这里插入图片描述

处于阻塞态的进程在事件发生后不会直接进入到运行态,而是先进入到就绪态。

二、进程相关命令

1. ps查看进程

一般使用 ps -aux(进程状态) 或 ps -ef(父子进程关系)
在这里插入图片描述
在这里插入图片描述
使用ps命令时查看的进程状态标记符
R:正在执行
S:阻塞状态
T:暂停状态
Z:僵尸进程(不存在但暂时无法消除)
D:不可中断的进程
<:高于优先级的进程
N:低于优先级的进程
L:有内存分页分配并锁在内存中
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
+ 位于后台的进程组

2. kill消灭进程

一般使用 kill -9 pid 消灭指定进程 (类似于Ctrl+c)
(给进程ID为pid的进程发送一个编号为9的信号)
kill命令本质是给一个指定的进程发送一个信号。
信号分为很多种,大多数情况下,进程接收到信号后会结束运行。进程中可以更改对信号的处理方式,但是无法更改对9、19信号的处理方式,防止特殊情况发生无法终止进程。

三、相关函数

1.相关头文件

#include <sys/types.h>
#include <unistd.h> 
#include <stdlib.h>
#include <sys/wait.h>

2.获取进程ID

grtpid()
原型:pid_t getpid(void);
返回值:成功,当前进程的ID
getppid()
原型:pid_t getppid(void);
返回值:成功,当前进程的父进程ID

#include <sys/types.h>
#include <unistd.h> 
#include <stdlib.h>
#include <sys/wait.h>
#include <stdio.h>

int main(void)
{
   
	pid_t pid,ppid;
	pid = getpid();
	ppid = getppid();
	printf("pid = %d\r\nppid = %d\r\n",pid,ppid);
}

3.运行进程

system()
在一个进程中运行另一个进程,运行完后回到原进程
原型:int system(const char * string); 参数:const char * string
待执行的命令(以字符串的形式),比如 “ls -l” 功能:system()会调用 fork()产生子进程,由子进程来调用/bin/sh-c
string 来执行参数 string 字符串所代表的命令,此命令执行完后随即返回 原调用的进程。在调用 system()期间
SIGCHLD 信号会被暂时搁 置,SIGINT 和 SIGQUIT 信号则会被忽略

#include <unistd.h> 
#include <stdlib.h>
#include <sys/wait.h>
#include <stdio.h>

int main(void)
{
   
	pid_t pid,ppid;
	pid = getpid
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值