当前位置: 首页 > news >正文

操作系统练习:在Linux上创建进程,及查看进程状态

说明

进程在执行过程中可以创建多个新的进程。创建进程称为“父进程”,新的进程称为“子进程”。每个新的进程可以再创建其他进程,从而形成进程树。

每个进程都有一个唯一的进程标识符(process identifier,pid)。在Linux中,init进程是所有其他进程的根进程。

在Linux中,可以通过系统调用fork()创建新进程,新进程的地址空间复制了原来进程的地址空间。父进程和子进程都会继续执行fork()调用之后的指令。

注:本文是《操作系统概念(第九版)》第三章的练习。

创建进程

创建进程的C语言代码示例

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>int main(){pid_t pid;pid = fork();/* Both parent and child process will continue from here */printf("current pid: %d \n", getpid());if (pid < 0){/* error occurred */fprintf(stderr, "Fork Failed");return 1;} else if (pid == 0) {/* child process */printf("In Child, pid: %d, ppid: %d\n", getpid(), getppid());execlp("/bin/ls", "ls", NULL);} else {/* parent process will wait for the child process to complete *//* 如果子进程已经结束了,但是其父进程还没有调用wait(),这个进程就是僵尸进程 */sleep(20);wait(NULL);printf("In parent, pid: %d, ppid: %d\n", getpid(), getppid());}return 0;
}

file

编译和执行

  • 编译: gcc -o process process.c
  • 执行: ./process
  • 执行结果的输出如下:
current pid: 198495									#父进程执行的,获取到的是父进程的pid
current pid: 198496									#子进程执行的,获取到的是子进程的pid
In Child, pid: 198496, ppid: 198495			 #在子进程的判断语句中,pid为子进程pid,ppid为父进程的pid
process  process.c									 #在子进程的判断语句中,执行execlp("/bin/ls", "ls", NULL);的输出。在此之后的20秒,子进程执行结束,短暂变为僵尸进程
In parent, pid: 198495, ppid: 197721		#在父进程的判断语句中,pid为父进程的pid,ppid为父进程的父进程pid

查看进程

  • ps -ef:列出系统中所有当前活动进程的完整信息
    file

  • ps -l: 可以查看进程状态,状态列位于列S;状态为Z的进程为僵尸进程
    file

  • pstree: 以树形结构展示进程
    file

http://www.lryc.cn/news/133492.html

相关文章:

  • Java虚拟机(JVM):垃圾收集算法
  • 【爬虫】Requests库的使用
  • 了解生成对抗网络 (GAN)
  • opencv-人脸关键点定位
  • 言语理解与表达 郭熙(一)
  • 【stable-diffusion使用扩展+插件和模型资源(上】
  • 面试之快速学习STL-无序关联式容器
  • C++线程库
  • 一文看懂群晖 NAS 安装 Mysql 远程访问连接
  • 永久设置pip指定国内镜像源(windows内)
  • 【SA8295P 源码分析】27 - QNX Ethernet MAC 驱动 之 emac_tx_thread_handler 数据发送线程 源码分析
  • 爬虫抓取数据时显示超时,是代理IP质量不行?
  • 【管理运筹学】第 5 章 | 整数规划 (2,割平面法及 0-1 变量的特性)
  • Vscode详细安装教程
  • 法线矩阵推导
  • 对容器、虚拟机和 Docker 的初学者友好介绍
  • linux部署clickhouse(单机)
  • vue组件注册
  • day20 飞机大战射击游戏
  • iOS设计规范是什么?都有哪些具体规范
  • 动手学深度学习-pytorch版本(二):线性神经网络
  • Spark 图计算ONEID 进阶版
  • Comparable和Comparator区别
  • JAVA知识点梳理
  • [SWPUCTF 2022 新生赛]ez_ez_php
  • GraphQL strawberry的使用回顾和体会
  • 08无监督学习——聚类
  • Python使用OpenCV库对彩色图像进行通道分离
  • 前端面试:【CSS】盒模型、选择器、布局、响应式设计、Flexbox 与 Grid
  • 深入浅出通过PHP封装根据商品ID获取抖音商品详情数据方法