进程查看命令:
ps命令
ps -aux 查看所有进程信息 vsz虚拟内存 rss物理内存
ps -ef PPID 父进程信息 TTY终端信息
pid_t pid =getpid(); 获取调用进程ID pid_t是int类型的数字
/proc/ 根目录下的进程目录
进程创建:
fork 用于创建一个子进程---通过复制调用进程创建新进程
子进程和父进程运行的代码一模一样,打印内容一样但是是不同的进程打印的
创建子进程的意义: 1.分摊任务处理压力
2.让子进程完成其他任务---背锅
处理任务有风险,子进程如果崩溃就在创建一个,提高稳定性
Q:如何在子进程完成其他任务?
A:分辨出父子进程—fork中对于父进程返回的是子进程的PID,失败返回-1,对于子进程来说,返回的是0
复制:操作系统通过复制父进程创建子进程,因此父子进程数据独有!!!,代码共享
进程状态:
运行、就绪、阻塞
Linux下:
运行:R task Running 拿到时间片就可以运行
可中断休眠:Sleeping 能够被简单的操作唤醒
不可中断休眠:Disk Sleeping 需要特定的方式才能唤醒
停止:T Stopped 什么工作都不干,用kill杀不死这个进程
kill -18 PID 唤醒后杀 kill-9 PID 强杀
僵死:
僵尸进程: 处于僵死状态的进程 kill -9 也杀不死僵尸进程
子进程先于父进程退出,操作系统保存着退出原因---操作系统无法回收资源
通知父进程获取退出原因,允许操作系统释放资源,但是父进程没有关注这个
通知导致进程退出后无法释放所有资源,处于僵死状态变为僵尸进程
危害:资源泄漏
如何避免---进程等待
处理方式---把父进程杀死的情况下僵尸进程也消失了
父进程都已经退出了操作系统保留原因没有意义
孤儿进程: 父进程先于子进程退出---子进程会在后台运行,因为还能联系到终端
ctrl+c 针对是前台进程 带+号,不带+号就是后台进程
1就是孤儿院,父进程退出之后父进程变成1号进程 systemd
这个时候退出子进程,不会变成僵尸进程,1号进程及时处理
精灵进程/守护进程: 特殊的孤儿进程,父进程为1号的,都是守护进程
以d结尾---服务,后台服务
变量就是内存空间的别名~
环境变量:
储存系统运行环境变量参数的变量
查看环境变量的命令:
env命令---查看环境变量
set命令---也可以查看环境变量,也可以查看普通变量
shell中默认查找程序的路径就是在PATH中
echo命令---也可以用来查看环境变量
PATH—以冒号间隔的路径—功能是指定可执行程序的路径
处于PATH路径下,运行程序,会在路径下查找,找到了会执行
常见的环境变量: HOME PWD SHELL PATH
$PATH 使用PATH变量中的内容
环境变量的特性:
全局特性(继承)
export 声明或设置环境变量
shell终端下的所运行的进程能够获取到所有的环境变量,但是获取不到普通变量
也不可以获取到其他终端的环境变量
getenv 通过环境变量的名称获取环境变量的内容
main函数的第三个参数中 int main(int argc ,char* argv[],char* env[])
extern 声明,但不定义 extern char** environment 声明全局变量
声明使用的是库中的数据,人家定义好的 char就是用的自己的 就近
unset 删除环境变量
环境变量的使用场景: 通常是父进程通过给子进程设置环境变量来达到向子进程传递数据的功能