Linux Shell编程笔记8 进程

本文详细介绍了Linux系统中的进程管理,包括ps、pstree、top等命令的使用,进程的启动、挂起、后台运行及信号处理。同时,探讨了任务调度系统如crontab和at命令的应用,以及/proc文件系统如何描述进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程查看机制

ps (process state缩写)命令是进程查看命名,用于Linux系统中所有的进程查看。在当前文件夹下执行如下命令ps,显示:

  PID TTY          TIME CMD
 7784 pts/1    00:00:00 zsh
 7813 pts/1    00:00:00 ps

一般可以使用ps -aux以BSD风格显示进程所有数据,各个字段的意义:


其中STAT字段的意义如下:
注意,ps命令不是动态更新的,即其输出的只是执行完命令瞬间后,各个进程的状态;如果要观测动态的,需要执行top命令。

pstree命令用于树型显示进程的父子关系。

Linux系统中,一个进程是程序的一次执行。一个进程由三个部分组成:

  • 程序的读取上下文,表示程序读取的执行状态
  • 程序当前的执行目录
  • 程序服务的文件和目录
  • 程序的访问权限
  • 内存和其他分配给进程的系统资源

程序分为代码段、数据段和堆栈段。代码段存储程序代码的数据,假设多个进程共享一个程序,它们就可以使用同一个代码段。数据段存放全局变量、常数和动态数据分配的数据空间。堆栈段分配子程序的返回地址、子程序的参数和局部变量,堆栈段包括在程序控制块PCB中。

进程管理

进程可以手工启动或者调度启动。手工启动直接在shell中执行,shell会等待进程执行完毕。命令后添加一个&符号,表示后台启动一个程序。终端前台程序,需要Ctrl+C组合。Ctrl+Z是把当前进程挂起,之后输入bg命令,可以转换到后台。如果shell中有运行的后台程序,那么输入fg可以把后台转前台(适合只有一个后台的情况)。

显示的意义是:<任务编号> <当前进程> <进程状态> <命令内容>

jobs命令显示当前shell被挂起的进程和后台进程的状况。有三个参数:

  • -l:显示进程的PID
  • -n:最后一次通知后停止或退出的作业
  • -p:显示所选定的作业的进程组引导符的进程标识

fg把后台作业移动到前台,如果没有参数,则默认把最近挂起的一个提到前台,用法是

fg JobID

其中,JobID的意义可以是:

  • 进程的标识号
  • %Number 通过作业编号引用作业
  • %String 引用名称以特定字符串开头的作业
  • %?String 引用名称中包含特定字符串的作业
  • %+ OR %% 引用当前作业,-表示前一个作业

bg参数的用法同fg

信号

Linux有很多不同类型的信号,可以使用kill -l来显示,常见的信号的意义:
Linux的kill命令用来向进程发送信号。常用的用法是:

kill -SIGSTP 23940

如果强制杀死一个进程,可以使用:

kill -9 PID

PID是特定的进程号,-9SIGKILL。只要执行该指令,进程立刻退出。

Linux的init进程

init进程的PID是1,这是操作系统的第一个进程,主要用来执行初始化脚本和监视进程。注意/etc/inittab这个文件,这是init进程用于初始化的配置文件(貌似Ubuntu系统没这个)。。

基本格式如下:

id:runlevels:action:process
  • id 配置行的唯一标识
  • runlevels配置试用的运行级别,可以有多个级别,也可以填入多个级别:
    - action可以有多个选项:

    - process:为init执行的进程,这些进程保存在/etc/rc.d/rcX中,X表示运行级别,rc程序接受X参数。这些程序都是链接符号。具体可以参考有关资料关于怎样配置init进程。

任务调度系统

一般涉及到crontab命令和at命令。crontab命令用于调度重复性任务,而at命令用于在特定的时间调度单个系统任务。一些自动化的脚本任务,可以通过这两个命令执行。

crontab命令不同,at文件只执行一次任务,之后便从目录中删除这些文件。at命令在/var/spool/cron/atjobs目录中存储要执行的命令或者脚本,以及当前环境变量的副本。at作业文件名是一个长数字,用于指定该文件在at队列中的位置,以.a问扩展名。cron进程在启动时检查at作业,并贞听是否提交了系作业。cron进程执行at作业后,将从atjobs目录中删除at作业。

具体关于cronat的用法,可以查阅详细的资料,不在赘述。

描述进程的/proc文件系统

Linux下一切介文件。/proc是一个虚拟文件系统,这是为了内核和内核模块向进程发送消息用的。该系统是用户和内核之间的接口,可以使用ls /proc查看文件系统的内容。有一些常用的文件:

具体关于进程文件系统的信息,可以参考其他资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值