Linux进程和计划任务

本文详细解析了Linux中的进程概念、创建机制、特征、状态变化、优先级调整、分类,以及进程间的通信方式,涵盖了ps、top、lsof等工具的使用,还介绍了进程启动、计划任务的设置,有助于理解进程管理的方方面面。

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

目录

程序

进程

创建:

特征:

如何分辨进程和线程

进程的优先级:

进程分类:

进程管理相关的命令

ps:(process state)查看静态的进程统计信息

查看静态的进程统计信息:

pstree命令:显示信息进程树

模拟结束僵尸进程:

急救处理病毒程序:

top:动态查询进程信息

总结查看设备性能的命令:

pgrep:查看指定的进程

pidof:查看程序的pid号

lsof:(list opened files)列举系统中已经被打开的文件

删除文件后,硬盘不释放:

free :查看内存空间

iostat:提供丰富的I/O性能状态数据(sysstat包提供)

查看进程信息扩展命令:

进程的启动方式

将前台任务放入后台执行:

计划任务

at :设置一次性执行任务(通常可用于定时重启)

crontab:设置周期性计划任务


程序

  • 是一组计算机能识别和执行的指令

  • 用于描述进程要完成的功能,是控制进程执行的指令集

进程

  • 指运行中的程序,是程序的副本

  • 存储在内存中

创建:
  • init:第一个进程,从CentOS 7以后为systemd

  • 进程:都有其父进程创建,fork,父子关系,Cow:Copy On Write写实时更新,有数据写入子进程需要新的内存空间

特征:
  • 动态性:进程是程序的一次执行过程,是临时的,有生命周期的,是动态产生,动态消亡的;

  • 并发性:任何进程都可以同其他进程一起并发执行;

  • 独立性:进程是系统进行资源分配和调度的一个独立单位;

  • 结构性:进程有程序、数据和进程控制块三部分组成。

内核的功用:进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等

如何分辨进程和线程
  • pstree:查看进程树(查找进程信息较为模糊,分不清主、子进程)

  • ls /proc/:可以查看进程相关信息

    • /proc/:存放进程

    • 每运行一个进程就会产生一个进程号

  • cd 进程号 :进入进程号目录

  • cat status:查看进程详细信息

    • Threads:后面数字显示是否为1,为一代表着单线程(精确)

  • cat /proc/pid进程号/status(以上步骤可以综合成这一条命令)

  • grep -i threads /proc/进程的PID/status:查看进程中的线程

  • prtstat 进程号:也是查看进程的详细信息

进程使用内存的问题

虚拟内存:

  • 内存泄露:Memory Leak

  • 内存溢出:Memory Overflow

物理内存:

  • 内存不足:OOM

pmap 进程id:查看进程的内存使用情况

进程的状态:

  • 创建状态:创建进程时申请一个空白PCB,填写控制和管理进程的信息,完成资源分配。

  • 就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行

  • 执行状态:进程处于就绪状态被调度后,进程进入执行状态

  • 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。

  • 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

  • 运行状态:running

  • 就绪状态:ready

  • 睡眠状态:分为两种,可中断:interruptable,不可被中断:uninterruptable

  • 停止状态:stopped,暂存与内存,但不会被调度,除非手动启动

  • 僵死状态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态的子进程

    • 僵尸进程:子进程如果出现意外关闭,父进程无感知就不会收回资源,及人为关闭父进程,资源不会回收就会产生僵尸进程

进程之间的通讯:

同一主机:

  • pipe:管道,单向传输(管道符:cmd1 | cmd2)

    • mkfifo tmp.fifo:创建临时性的管道文件

  • socket:套接字文件,双工通信(IP地址和端口号)

  • Memory-maped file:文件映射,将文件中的一段数据映射到物理内存,多个进程共享这片内存

  • shm shared memory:共享内存

  • signal:信号(kill 给进程发送信号,告诉进程应该关闭了,不能管理进程)

  • Lock:对资源上锁,如果资源已被某进程锁住,则其它进程想修改甚至读取这些资源,都将被阻塞,直到锁被打开

  • semaphore 信号量,一种计数器

不同主机:socket=IP和端口号

  • RPC remote procedure call:远程调用

  • MQ 消息队列,生产者和消费者,如:Kafka,RabbitMQ,ActiveMQ

进程的优先级:

进程优先级调整:

  • 静态优先级:100-139

  • 进程默认启动时的nice值为0,优先级为120

  • 只有根目录才能降低nice值(提高优先性)

进程分类:
  • 守护进程:daemon,在系统引导过程中启动的进程,和终端无关进程

  • 前台进程:跟终端相关,通过终端启动的进程

进程管理相关的命令

ps:(process state)查看静态的进程统计信息

语法:

ps [选项] [进程]:查看静态进程信息

  • Linux系统进程的相关信息均保存在/proc/pid进程号/status下

  • 查看进程信息、内存、CPU使用率等(只能显示当前终端的应用程序)

[选项]:

  • UNIX选项:-A -e

  • GUN选项:--help

  • BSD选项:a

常用选项:

  • a:显示当前终端下的所有进程信息,包括其他用户的进程。与"x"选项结合时将示系统中所有的进程信息

  • u:使用以用户为主的格式输出进程信息

  • x:显示当前用户在所有终端下的进程信息

  • -e:显示系统内的所有进程信息

  • -l:使用长(Long)格式显示进程信息

  • -f:使用完整的(Full)格式显示进程信

  • k|--sort [属性]:对属性排序,属性前加 - 表示倒序

    • ps aux k -%cpu

  • o [属性] [选项]:显示定制的信息 pid、cmd、%cpu、%mem

查看静态的进程统计信息:
  • ps aux:查看系统中所有的进程(常用,必须记住!!!)

  • ps -elf:可以完整查看系统中所有的进程,并能看到父进程的PID和优先级

  • ps axo [查看信息] |[执行命令]:在系统中挑选查看的进程内容

pstree命令:显示信息进程树

pstree -p:显示进程树并显示进程号

模拟结束僵尸进程:

过滤僵尸进程:

ps aux |grep -v grep |grep Z

急救处理病毒程序:

排查病毒

解决病毒

chattr +i [文件名] :建立超级管理员也无法删除的文件

top:动态查询进程信息

语法:

top [选项] [进程]:动态查询进程信息

[选项]:

  • -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;

  • -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;

  • -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;

  • -p 进程PID:仅查看指定 ID 的进程;

  • -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;

  • -u 用户名:只监听某个用户的进程;

在top命令显示窗口可用命令交互:

  • ? 或 h:显示交互模式的帮助;

  • c:按照 CPU 的使用率排序,默认就是此选项;

  • M:按照内存的使用率排序;

  • N:按照 PID 排序;

  • T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;

  • k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;

  • r:按照 PID 给某个进程重设优先级(Nice)值

  • q:退出 top 命令;

补充:htop进化版的top(需自行安装)

总结查看设备性能的命令:
  • 内存:free、top

  • cpu:top、ps aux

  • 磁盘大小:lsblk、看剩余df

  • 读写:iostat、dd、vmstat

  • 网络:dmstat、iftop

pgrep:查看指定的进程

[选项]:

  • -U:指定用户

  • -l:显示进程名

  • -a:显示完整格式的进程名

  • -P pid:显示指定进程的子进程

pidof:查看程序的pid号

pidof 程序名

lsof:(list opened files)列举系统中已经被打开的文件

语法:

lsof [选项]

[选项]:

  • -c 字符串:列出字符串开头进程打开的文件

  • +d 目录名:列出某个目录中所有被进程调用的文件

  • -u 用户名:只列出某个用户的进程打开的文件

  • -p pid:列出某个pid进程打开的文件

lsof | more:查询系统中所有进程调用的文件

删除文件后,硬盘不释放:
  • 方法一:将原有内容覆盖

  • 方法二:恢复误删的文件

    lsof |grep delete:过滤出正在使用的被删除文件

    kill -9 pid号:杀掉进程

补充:

vmstat:监控系统资源、虚拟磁盘

free :查看内存空间
  • free -h:人性化查看

  • free -m:以m为单位查看

  • 清除缓存:

    • echo 3 > /proc/sys/vm/drop_caches

iostat:提供丰富的I/O性能状态数据(sysstat包提供)

[选项]:

  • -c:只显示CPU行

  • -d:显示设备〈磁盘)使用状态

  • -k:以千字节为为单位显示输出

  • -t:在输出中包括时间戳

  • -x:在输出中包括扩展的磁盘指标

iostat 1 -d /dev/sda:只看sda硬盘

查看进程信息扩展命令:

iotop:监控磁盘I/O(需要安装)

iftop -i ens33:监控网络流量(iftop也需安装)

dstat:系统资源统计

webmin:用户管理,可以直接监控设备信息,但只能对单台使用(需自行安装)

w |grep user:查看登录的所有用户数

进程的启动方式
  • 手动启动:用户输入命令,直接执行程序

  • 后台启动:在命令行尾加入“&”符号(不影响当前操作)

将前台任务放入后台执行:
  • dd if=/dev/zero of=/dev/null &

  • jobs:查看在后台运行的进程

  • fg 1(序号):将后台进程重新调回前台

  • Ctrl z:将进程再调回后台,并停止

  • bg 1(序号):继续后台命令

计划任务

at :设置一次性执行任务(通常可用于定时重启)

at  [选项]  [时间]  [日期]

atq:查看未执行的任务

at队列存放在/var/spool/at目录中

crontab:设置周期性计划任务
  • 按照预先设置的时间周期重复执行用户指定的命令操作

  • 属于周期性计划任务

  • 主要配置文件

    • 全局配置文件位置:/etc/crontab

    • 系统默认的设置位置:/etc/cron.*/

    • 用户自定义的设置位置:/var/spool/cron/用户名

语法:

crontab [选项] [任务内容]

[选项]:

  • -e:定制一个定时任务

    • 类似于进入vim编辑器

    • 可以使用cat /etc/crontab查看编辑格式

  • * * * * * [执行的命令]:分别代表

    • 分:0-59

    • 时:0-23

    • 日:1-31

    • 月:1-12

    • 周:0-6,0和7代表sunday

  • 数值的特殊表示方法:

    • *:代表该范围内的任意时间

    • ,:代表间隔的多个不连续时间点

    • -:表示一个连续的时间范围

    • /:指定间隔的时间频率

    • 例:

      0 17 * * 1-5:周一到周五每天17:00

      30 8 * * 1,3,5:每周一、三、五的8:30

      0 8-18/2 * * *:8:00到18:00之间每两小时

      0 * */3 * *:每三天

  • -l  [-u  用户名]:查看计划任务

  • -r:删除计划任务

注意:命令执行的目录必须是绝对路径,为方便书写可以将相对路劲的目录写入文件:

  • echo $PATH

  • 将PATH=路径写入计划任务

补充:

date +%F :代表当前日期(文件名写入编辑器命令时需在%前加入\符号)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值