Linux进程与线程

相关概念

进程

可执行程序的运行态
可操作系统调度的基本单位
线程容器
本身包含指令、数据等资源

进程生命周期

线程

进程中被执行的最小单元
cpu调度的基本单位
线程带有指令、数据等资源

常用进程管理命令

ps 进程列表快照

风格参数

unix风格参数:ps -ef
bsd风格参数:ps aux
gnu风格参数:ps --pid pidlist

相关使用
  1. ps -ef:获得所有进程列表ps -ef

  2. ps aux:获得所有进程列表,并提供更多可用数据
    ps aux

  3. ps --pid 进程号1 进程号2 xxx 进程号n:显示指定进程的信息
    ps --pid

  4. ps -o pid,ppid,psr,cmd,xxxx:指定输出
    ps -o

    使用-m表示打印出对应进程下的线程

    关于使用-o与标准输出参数的对应关系

      CODE   NORMAL   HEADER
      %C     pcpu     %CPU
      %G     group    GROUP
      %P     ppid     PPID
      %U     user     USER
      %a     args     COMMAND
      %c     comm     COMMAND
      %g     rgroup   RGROUP
      %n     nice     NI
      %p     pid      PID
      %r     pgid     PGID
      %t     etime    ELAPSED
      %u     ruser    RUSER
      %x     time     TIME
      %y     tty      TTY
      %z     vsz      VSZ
    
    

    ps -o 参数
    5.进程信息字段说明

    UID:启动进程的用户
    PID:进程的进程号
    PPID:父进程进程号
    C、%CPU:cpu使用率
    STIME:进程启动时的系统时间
    TTY:进程启动时终端设备,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
    TIME:运行进程需要的累积CPU时间
    CMD:启动程序名称或命令
    %MEM:占用内存的百分比
    VSZ:该进程使用的虚拟內存量(KB)
    RSS:该进程占用的固定內存量(KB)(驻留中页的数量)
    STAT:进程的状态
    START:该进程被触发启动时间

    关于进程的状态如下:

    D:无法中断的休眠状态(通常 IO 的进程)
    R:正在运行可中在队列中可过行的
    S:处于休眠状态
    T:停止或被追踪
    W:进入内存交换 (从内核2.6开始无效)
    X:死掉的进程 (基本很少见)
    Z:僵尸进程
    <:优先级高的进程
    N:优先级较低的进程
    L:有些页被锁进内存
    s:进程的领导者(在它之下有子进程)
    l:多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads)
    +:位于后台的进程组

top 交互式进程观测

top命令经常用来监控linux的系统状况,实时显示系统中各进程的资源占用情况。
在这里插入图片描述
具体使用可参考其他博主的文章:https://blog.csdn.net/yjclsx/article/details/81508455

kill killall 结束进程

结束top进程前
在这里插入图片描述
结束top进程后
在这里插入图片描述

fg 进程切换到前台

python demo.py 2 3 进程已挂起
在这里插入图片描述
执行fg命令后,前台重新执行了该命令
在这里插入图片描述
在这里插入图片描述

bg 进程切换到后台

通过 jobs 命令可以看到当前后台被停止的作业是 python demo.py 2 3,其编号是1,则如果要在后台可以执行,则可以通过命令bg实现,格式为:bg jobs命令时的编号(比如 python demo.py 2 3 为 1,则为 bg 1)
在这里插入图片描述
在这里插入图片描述

ctrl z 挂起进程

将 python demo.py 2 3 进程挂起,挂起后,python demo.py 2 3 进程都是T(停止)状态
在这里插入图片描述
注意:只有在前台的进程才能被挂起,后台进程是不会被挂起的

demo.py内容

import multiprocessing
import os
import sys
import threading
from time import sleep


def thread_demo(index):
    while True:
        print(f"thread_demo {index} pid={os.getpid()} thread_name={threading.current_thread().name}")
        sleep(1)


def process_demo(index):
    while True:
        print(f"process_demo {index} pid={os.getpid()} thread_name={threading.current_thread().name}")
        sleep(1)


def multi_thread(count):
    for index in range(count):
        thread = threading.Thread(target=thread_demo, args=[index])
        thread.start()
        sleep(1)


def multi_process(count):
    for index in range(count):
        process = multiprocessing.Process(target=process_demo, args=(index,))
        process.start()
        sleep(1)


if __name__ == '__main__':
    process_count = int(sys.argv[1])
    thread_count = int(sys.argv[2])
    multi_process(process_count)
    multi_thread(thread_count)
    input()
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值