Linux(8)、进程管理相关

进程管理

x86的cpu是执行环,由内到外分为0-3环,内核运行在0环,一般用户进程运行在3环。

进程工作模式

  • 用户模式
    • 当前运行的是用户程序、应用程序或者内核之外的系统程序,那么对于进程就是在用户模式下运行。
  • 内核模式
    • 用户程序执行过程中出现系统调用或者发生中断事件,就要运行操作系统即核心程序,进程模式就变为内核模式;
    • 在内核模式下运行的进程可以执行机器的特权指令;
    • 进程不受用户的干预,即使是root用户也不能干预内核模式下进程的运行。

内存

  • 内核空间
    • 内核模式下运行的进程的使用的内存
    • 数据结构(task structure),与内存中的用户进程一一对应
  • 用户空间
    • 用户模式下运行的进程的使用的内存
    • 线性地址:只有两个进程,自己和内核,用户进程空间会被分页,每页固定大小
  • 优先级关系
    • linux系统中有0-140种优先级,数字越小优先级越高
    • 0-99内核调整的,100-139用户可控制
  • nice值
    • -20---19,调整nice值即调整了优先级,普通用户仅能够调大自己进程的nice值,而管理员则不限制;
  • O标准:除了init都有父进程

  • ls /proc 每一个目录对应一个进程

  • 进程状态
    • D不可中断的睡眠
    • R运行或就绪
    • S可中断的睡眠
    • T终止
    • z僵尸
    • <高优先级进程
    • N低优先级进程
    • +前台进程组中的进程
    • l多线程进程
    • s会话进程

进程命令

ps
  • ps aux查看当前系统所有进程:

    [root@localhost fangqihan]# ps aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.6 127920  6472 ?        Ss   06:25   0:02 /usr/lib/systemd/systemd --switched-root --syst
  • 参数
    • tty:关联终端
    • ?:表示与终端无关
    • VSZ:虚拟内存集
    • RSS:常驻内存集
    • 加了[]的线程表示内核线程
    [root@localhost fangqihan]# ps aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root       1300  0.0  0.2 115572  2328 tty1     Ss+  06:25   0:00 -bash
    root       2262  0.0  0.5 158800  5540 ?        Ss   09:49   0:02 sshd: root@pts/0
  • BSD风格:选项不加-
    • a:显示所有跟终端有关的进程
    • u:显示user
    • x:显示所有与终端无关的进程
  • SystemV风格:需要-
    • PRI:优先级
    • PSR:运行的当前cpu编号
    • NI: nice值
pstree

显示进程树

若没有找到pstree命令,则需提前安装:yum install psmisc

# 显示当前所有进程的进程号和进程id:
[root@localhost fangqihan]# pstree -p
systemd(1)─┬─NetworkManager(693)─┬─dhclient(3131)
           │                     ├─{NetworkManager}(701)
           │                     └─{NetworkManager}(705)
           ├─VGAuthService(637)
           ├─auditd(614)───{auditd}(615)
           ├─chronyd(659)
           ├─crond(660)
           ├─dbus-daemon(642)───{dbus-daemon}(650)
           ├─firewalld(683)───{firewalld}(829)
           ├─login(678)───bash(1300)
           ├─lvmetad(486)
           ├─master(1182)─┬─pickup(3130)
           │              └─qmgr(1189)
           ├─polkitd(640)─┬─{polkitd}(648)
           │              ├─{polkitd}(655)
           │              ├─{polkitd}(657)
           │              ├─{polkitd}(673)
           │              └─{polkitd}(680)
           ├─rsyslogd(1030)─┬─{rsyslogd}(1034)
           │                └─{rsyslogd}(1036)
           ├─sshd(1028)─┬─sshd(2262)───bash(2266)───su(2563)───bash(2564)───sudo(2579)───bash(2583)
           │            ├─sshd(2955)───bash(2959)
           │            ├─sshd(3162)───bash(3166)───pstree(3302)
           │            └─sshd(3190)───bash(3194)
           ├─systemd-journal(463)
           ├─systemd-logind(651)
           ├─systemd-udevd(494)
           ├─tuned(1027)─┬─{tuned}(1273)
           │             ├─{tuned}(1274)
           │             ├─{tuned}(1275)
           │             └─{tuned}(1289)
           └─vmtoolsd(641)───{vmtoolsd}(677)
pgrep

pgrep bash 与bash相关的所有进程号
比较复杂

pidof

根据进程名查找id号

top

display Linux processes,linux的任务管理器,处于刷新状态,每5s刷新一次。

相关选项

  • M:根据驻留内存大小进行排序
  • P:根据cpu使用百分比进行排序
  • T:根据累计时间进行排序
  • c:显示完整的命令行信息-
  • q:退出top
  • k pid:杀死某进程
  • d:指定刷新时间,top -d 1,单位s
  • b:批模式
kill

kill -n pid

  • 1:sighup,让一个进程不用重启,就可以重读其配置文件,并让新的配置文件生效

    # 以redis进程为列
    [root@localhost ~]# ps aux|grep redis
    root       3186  0.1  0.8 145312  7992 pts/2    Sl+  12:33   0:00 /usr/local/redis/bin/redis-server *:6379
  • 2:sigint,中断一个进程

    [root@localhost ~]# kill -2 3186
    
    # server端
    3186:signal-handler (1533616522) Received SIGINT scheduling shutdown...
    3186:M 07 Aug 12:35:22.264 # User requested shutdown...
    3186:M 07 Aug 12:35:22.264 * Saving the final RDB snapshot before exiting.
    3186:M 07 Aug 12:35:22.266 * DB saved on disk
    3186:M 07 Aug 12:35:22.266 # Redis is now ready to exit, bye bye...
  • 9:sigkill,杀死一个进程,强行杀死

    已杀死
  • 15:sigterm,终止一个进程,给时间交代后事

    3221:signal-handler (1533616640) Received SIGTERM scheduling shutdown...
    3221:M 07 Aug 12:37:20.843 # User requested shutdown...
    3221:M 07 Aug 12:37:20.843 * Saving the final RDB snapshot before exiting.
    3221:M 07 Aug 12:37:20.844 * DB saved on disk
    3221:M 07 Aug 12:37:20.844 # Redis is now ready to exit, bye bye...
  • 其他命令:

    ps aux | grep top   # 寻找与top相关的进程号
    kill pid
    killall command     # 会杀死与command相关的所有进程

猜你喜欢

转载自www.cnblogs.com/fqh202/p/9436379.html