进程的相关操作

基础命令 

1.ps

  • 显示所有进程的详细信息ps -aux
  • 列出所有的进程,相比 ps -aux 信息要少一些ps -ef
  • ps -ef | grep [所查找的进程]

8bee17e1e4354d99867b3b7c45677550.png

2.top命令

  • 事实显示进程的信息
  • 语法:top[-][i][n数字]
  • 不显示任何闲置 (idle) 或无用 (zombie) 的进程top -i
  • 更数指定次数后,退出top命令top -n数字

76b078627b4d4d20b2113d725426fee7.png

基础信息解析:

9df3d009492545c59190ac5a2c063d37.png

3.ps tree 

将所有的进程以树型结构的方式进行展示:

b036df059e88424f8850e089ad02c53d.png

4.kill

终止进程

eg:kill -9 + 进程号

4d122cb25a334cb5bc8aa2d086ad1e96.png

创建进程

1.fork

  • 成功:返回给父进程是子进程的pid,返回给子进程的是0
  • 失败:返回-1,并设置errno
// 创建一个子进程,并打印 Hello fork
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
        pid_t pid = fork();
        if(pid==-1){                
                perror("fork");
                return -1;        
        }
        printf("Hello fork.\n");       
 return 0;
}

577d5c4a1bb24805b121a20aa5437ae5.png

c7bfe2efe8974a9897c4526bf30b8597.png

为什么出现两次?

  • 父进程在子进程打印之前结束,则会回到终端命令后继续执行子进程
  • 子进程的打印语句在父进程结束之前执行,则会在回到终端命令前执行完毕
// 创建一个子进程,并打印进程的pid
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
        pid_t pid = fork();
        if(pid==-1){
                perror("fork");
                return -1;        }
        printf("pid = %d,Hello fork.\n",getpid());
return 0;}

4e79e3448ec44d49ba0c2a01c4e6876e.png

父子进程:

  1. 父子进程并发执行,子进程从 fork() 函数之后开始执行
  2. 父子进程的执行顺序由操作系统算法决定的,不是由程序本身决定
  3. 子进程会拷贝父进程地址空间的内容,包括缓冲区、文件描述符
// 父子进程数据空间拷贝,缓冲区的拷贝
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
        // 标准IO
        write(1,"write hello.",12);
        // 文件IO自带缓冲区
        fputs("fputs hello.",stdout);
        // 注意没有换行符,stdout的缓冲区属于行缓冲(在添加\n后就会直接在缓冲区被冲出来)
        pid_t pid = fork();
        if(pid==-1){
                perror("fork");
                return -1;
        }
        printf("pid = %d,Hello fork.\n",getpid());
        return 0;
}

3f58a1113cc74edaa1b0052aa6ec89f5.png

2e635f01faf5402dacca400838eefb02.png

文件描述符的拷贝

  1. 每个进程都会维护一个文件表项,即文件描述符与文件指针的映射表
  2. 在 Linux 内核中有一个 struct file 结构体来管理所有打开的文件
  3. 当子进程拷贝了父进程文件描述符后,则会共享文件状态标志与文件偏移量等信息

c9f309dbdf174924a6c321af5ce377b7.png

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值