C语言进程概念,孤儿进程,僵尸进程,exec函数族,守护进程

阅读: 评论:0

C语⾔进程概念,孤⼉进程,僵⼫进程,exec函数族,守护进程C语⾔进程概念,孤⼉进程,僵⼫进程,exec函数族,守护进程变速盘
【进程】
1. 进程
进程是⼀个程序的⼀次执⾏的过程
每⼀个进程都分配⼀个虚拟的4G内存
0-3G : ⽤户
3G-4G : 内核
2. 进程和程序的区别
程序是静态的
进程是动态的
3. 进程的内存管理
4. 正⽂段、⽤户数据段、系统数据段
5. 进程号
唯⼀的标识⼀个进程
6. 进程的类型
交互进程(ctrl+z / jobs -l / bg / fg / & / kill -l)
ctrl + z : 使进程进⼊挂起状态(T), 被挂起的进程称为作业
jobs -l: 查看挂起的进程
bg % 作业号 :使作业恢复前台运⾏, 不能ctrl+c结束
fg % 作业号 : 使作业恢复前台运⾏, 可以ctrl+c结束
kill -l : 查看信号种类
kill -9 PID : 杀死进程
ps -ajx : 查看进程的运⾏状态
批处理进程(运维)
守护进程( 1 init )
7. 进程的运⾏状态
ps -ajx
运⾏态R:此时进程或者正在进⾏,或者准备运⾏
内核调度程序到CPU上执⾏ running
等待态:此时进程需要满⾜⼀些条件,如果不满⾜就等待
可中断S:如果进程收到信号会醒来 ctrl+c
不可中断D:如果进程收到信号不会醒来
停⽌态T:此时进程被中⽌SIGSTOP
死亡态Z:已终⽌的进程、僵⼫进程
但还在进程向量数组中占有⼀个task_struct结构task_struct{
pid_t pid;
R;
};
< ⾼优先级
N 低优先级
L 有些页被锁进内存
s 会话组组长
+位于前台的进程组
l 多线程,克隆线程
ctrl + alt + f1 - f6 : 打开字符终端
⽤户名:user
密码:passworld
主要是为了多⽤户使⽤计算机
结束字符终端: alt + f7
top
top -p PID : 动态查看进程状态
renice -5 PID : 改变进程的NI值(默认0)7. 进程相关的函数
/fork/exit
创建进程、退出进程
wait/waitpid
伏秒特性的绘制方法和含义回收进程资源
pid_t fork(void);
/*********************************************
*功能: 创建⼀个进程
*参数: ⽆
*返回值:
成功  0 :⼦进程  > 0 :⽗进程
失败  -1
**********************************************/
/*============================================================================= #
# 创建者: 荆卫
#
# QQ : 1329177433
#
# Last modified: 2021-07-05 15:11
#
# Filename: fork.c
#
# Description(描述): 进程 fork
#
=============================================================================*/ #include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
int main(int argc,const char*argv[])
{
printf("开始创建进程\n");
pid_t pid;
pid =fork();
// 创建进程失败
if(pid <0)
{
perror("fork");
return-1;
}
else
if(pid >0)// ⽗进程
{
while(1){
printf("i'am father\n");
sleep(1);
}
}
dna甲基化检测方法
else
if(pid ==0)// ⼦进程
{
while(1){
printf("i'am son\n");
sleep(1);
}
}
return0;
}
从fork函数往下分为两个进程开始运⾏。
⽗进程和⼦进程执⾏顺序是随机的。
fork函数特性:
1.⼦进程创建时,⼏乎拷贝了⽗进程全部内容,包括代码段、数据段、堆栈段、⽂件描述符、虚拟地址空间
2.同⼀个⽗进程创建的⼦进程都是属于同⼀个进程组 pkill -9 -g PGID
3.进程是管理资源的最⼩单位
思考:
int main()
{
fork();
fork();
}
会创建多少个进程,进程之间的关系是什么样的?
会创建4个进程,关系如下:
exit和_exit函数
exit/_exit:exit调⽤c库,会刷新缓冲区,⽽_exit不会刷新缓冲区
函数原型
#include <stdlib.h>
void exit(int status);
void fun()
{
printf("cccccc");
exit(0);// c库函数,可以刷新缓冲区
}
int main(int argc,const char*argv[])
{
printf("aaaaa\n");
fun();
printf("bbbbbb\n");
return0;
}
+ 函数原型
#include <unistd.h>
void _exit(int status);
void fun()
{
printf("cccccc");
_exit(0);// 系统调⽤,不会刷新缓冲区
}
int main(int argc,const char*argv[])
{
printf("aaaaa\n");
fun();
printf("bbbbbb\n");
return0;
}
wait函数和waitpid函数
函数原型
pid_t wait(int *status);
/**************************************
* 功能:⽗进程等待⼦进程退出,并回收⼦进程资源(僵⼫进程),阻塞* 参数: @status  获取⼦进程退出状态
返回值:
网眼通
结束返回pid
没结束返回0
***************************************/
WEXITSTATUS(status)  获取⼦进程返回值,
WIFEXITED(status)  判断⼦进程是否正常结束
int main(int argc,const char*argv[])
{
pid_t pid;
pid =fork();
if(pid <0)
{
perror("fork");
exit(-1);
}
else if(pid >0)
{
printf("\n");
// wait函数
printf("----------------\n");
int status;
wait(&status);
// 获取⼦进程的返回值
printf("WEXITSTATUS:%d\n",WEXITSTATUS(status));
// 获取⼦进程是否正常结束 1正常 0异常
printf("wIFEXITED:%d\n",WIFEXITED(status));
}
else{
sleep(2);
printf("\n");
exit(20);
}
滚动体
return0;
}
马凳筋

本文发布于:2023-05-16 13:56:01,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/102018.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   函数   创建   结束   数据   资源   退出
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图