init进程是所有进程的父或者祖父
进程的组成:
用户 id CPU时间片 内存 状态 时钟 优先级 源程序 fd 。。。。。
进程的状态:man ps
PROCESS STATE CODES
R 运行或可运行
D 不可中断睡眠
S 可中断睡眠
T 挂起 暂停 等待
X 死亡
Z 僵尸(已经结束但依然占据进程树上节点)
< 高优先级
N 低优先级
L 页内存锁定
s session leader 创建并管理进程的进程
l 多线程进程
+ 前台进程
用户 id CPU时间片 内存 状态 时钟 优先级 源程序 fd 。。。。。
进程的状态:man ps
PROCESS STATE CODES
R 运行或可运行
D 不可中断睡眠
S 可中断睡眠
T 挂起 暂停 等待
X 死亡
Z 僵尸(已经结束但依然占据进程树上节点)
< 高优先级
N 低优先级
L 页内存锁定
s session leader 创建并管理进程的进程
l 多线程进程
+ 前台进程
fg 把后台进程调到前台执行
bg 把前台进程转到后台执行
bg 把前台进程转到后台执行
创建进程的进程:父进程
被创建的进程:子进程
进程上下文:进程运行到什么时候了
pid_t 进程id类型
fork();
1.可以创建一个进程,并让子进程和父进程同时运行。
2.子进程复制父进程的代码,写时拷贝。逐字节拷贝。复制进程上下文。
3.父进程的fork函数返回子进程id,而子进程的fork函数返回0.
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
父子进程例子
#include <stdio.h>
#include <unistd.h>
int main(){
pid_t pid;
printf("我是父进程,我要创建进程了!\n");
sleep(2);
pid = fork();
if(pid){
while(1){
printf("我是父进程\n");
sleep(1);
}
}else{
while(1){
printf("我是子进程\n");
sleep(1);
}
}
return 0;
}