• Linux 进程管理 Process


    进程与程序相比,进程是一个正在运作中的程序   Process 与 Program

    在进程中再输入 bash 会进入子进程,此时使用 ps -l 可以看到 PID 与 PPID

     在 Linux 的进程呼叫通常称为 fork-and-exec 的流程,进程都会籍由父进程以复制(fork)的方式产生一个一模一样的子进程,然后被复制出来的子进程再以 exec 的方式来执行实际要进行的程序,最终就成为一个子进程的存在。

     crond 这个程序每分钟会扫描 /etc/crontab 以及相关的配置文件,来进行工作排程,它会在后台进程中始终运行,也叫“常驻在内存当中的进程”

    这些常驻程序可以称为:服务( daemon )

    Linux 的服务很多,系统本身所需要的服务有: crond、atd、rsyslogd 等

    网络联机相关的服务有:Apache、named、postfix、vsftpd 等

    网络联机相关服务在启动后,会启动一个负责网络监听的端口(port),以提供外部客户端(client)的联机请求。

    一般服务类型的程序都会加上 d 在文件名后头,包括 httpd、vsftpd 等

    在 Linux 中,默认提供了六个文字界面登录窗口,以及一个图形界面,可以使用 Alt + F1 ... F7 来切换不同的终端机界面,而且每个终端机的用户可以不一样。

    当执行 cp file1 file2 & 这个命令时,命令后面的 & 表示复制操作将在后台进行,它执行完毕后,会输出完成的消息。

    后台进程的优势就是不干扰前台进程,但缺点也很明显:

     所以,我们也要来学习一下 job control 的管理

    1、bash 只能够管理自己的工作而不能管理其他 bash 的工作,即使是 root 用户,也不能把别的 bash 底下的 job 运行起来

    2、后台进程的工作状态有两种:暂停 Stop  和 运行中 Running

    直接将指令放到后台执行的 &

     

     在使用 & 命令后,bash 会赋予此后台进程一个 job number (工作号码),就是那个 [1]

    后面的 14432 是进程的 PID

    上面 [1]+ Done  是执行完成的, tar: Removing .. 是执行出错的

    为避免输出影响到正常工作,建议把后台进程的输出重定向到文件里:

     将前台工作丢到后台并暂停: Ctrl + Z

     使用 jobs -l  可以查看所有的后台进程

     在 [1]、[2] 后面出现的 + - 表示将被取用的工作,+ 是最后一个工作,- 是最后第二个工作,超过三个的就没有这个符号标记了

    将后台工作拿到前台来:fg

     将后台进程由 暂停 变成运行中: bg

     管理后台进行的工作: kill

     -9 通常用来强制删除一个不正常的工作, -15 则是以正常步骤结束一项工作(默认)

     离线管理问题

    如果以远程联机的方式在 Linux 上运行一个后台工作,然后连接断开了,此时工作也会被中断掉

    为防止这种行为导致的结果不符合预期,可以使用 at 将任务排期,或者使用 nohup 命令:

     需要注意的是,nohup 并不支持 bash 内建的指令,只能使用外部指令:

     管理进程的命令: ps 、top 、pstree

    ps 将某个时间点的进程运作情况输出

     简单区分为 ps -l 查自己的进程

    F 进程标志,4 表示 root ,1 表示此子进程仅进行复制(fork)而没有实际执行(exec)

    S 进程状态

     C CPU使用率,单位为百分比

    PRI / NI  Priority / Nice 的缩写,代表此进程被  CPU 所执行的优先级,数值越小代表该进程越快被 CPU 执行。

    ADDR / SZ / WCHAN 与内存有关

    ADDR 是 kernel function ,指出该进程在内存的哪个部分,如果是个 running 的进程,一般就会显示  -

    /SZ 代表此进程用掉多少内存

    /WCHAN 表示目前进程是否运作中 若为 - 就是运作中

    TTY 登入者的终端机位置,若为远程登录则使用动态终端接口(pts/n)

    TIME 使用掉的 CPU 时间,表示此进程实际花费 CPU 的时间,而不是系统时间

    CMD: 进程的触发程序指令

     ps aux 查系统所有运行中的进程(没有 - )

     

     top 动态观察进程的变化

     top 可以持续的监测整个系统的进程工作状态,默认的刷新时间是 5秒,可以 -d 来修改

     top 输出内容为分两个部分:

     

     

     top 默认使用 CPU 使用率进行排序,按 M 可以改成按内存排序,按 P 恢复,离开按 q

    如果要将 top 的结果输出到文件,可以这样:

     如果只想观察特定某个进程,可以这样:

     

     

     pstree 查找进程相关性

     

     进程是通过信号进行互相管理的,主要的信号代号与名称如下:

     可以通过 kill 、killall 来传递信号:

     

     

     总之,要删除某个进程,可以使用 PID 或者启动该进程的指令名称,而如果要删除某个服务,最简单的方法就是利用 kissall,因为它可以将系统中所有以某个指令名称启动的进程全部删除。

    进程的优先级  Priority 与 Nice 值

     

     nice : 新执行的指令即给予新的 nice 值

     renice 已存在进程的 nice 重新调整

     系统资源的观察

    free 观察内存使用情况 M 以 MBytes 来显示 

    uname 可以列出目前的系统核心版本、主要硬件平台以及CPU类型等等的信息

    Linux DESKTOP-D5J8HJ2 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

    uptime 观察系统启动时间与工作负载

    它会显示系统已经开机多久,以前 1、5、15分钟的平均负载。和 top 相比,它可以显示出 top 画面的最上面一行。

    netstat 追踪网络或插槽文件

    一般被用在网络的监控方面,在进程管理方面也有作用:

    网络方面:

    进程(Socket)方面: 

     

     dmesg 分析核心产生的信息

    所有的核心侦测的讯息,不管是开机时候还是系统运作过程中,反正只要是核心产生的讯息,都会被记录到内存中的某个保护区段。 dmesg 这个命令就能够将该区段的讯息读出来。

    dmesg | more 分页显示讯息

     dmesg | grep -i dev 展示讯息中含有 dev 的信息

    vmstat 侦测系统资源变化

    vmstat 1 3  统计目前主机状态,每秒一次,共三次

    vmstat 15 每15秒输出一次目前主机状态,直到按 Ctrl + C 停下来

      

     

     如何查询 SUID / SGID : 使用 find 命令  find / -perm /6000

    /proc/*  代表的意义

    所有的进程都是在内存当中,而内存中的数据都写到了 /proc 这个目录下,所以我们可以查看 /proc 这个目录当中的文件

     基本上,各个进程的PID 都是以目录的形式存在于 /proc 当中。我们开机所执行的第一个程序 systemd 它的PID 通常是 1,它的所有信息都写在 /proc/1/* 当中

     

     查询已开启文件或已执行进程开启之文件

    fuser 藉由文件(或文件系统)找出正在使用该文件的进程

     

     

     

     lsof 列出被进程所开启的文件档名

     pidof 找出某个正在执行的程序的 PID

  • 相关阅读:
    利用vbs设置Java环境变量
    svg translate 操作
    JSTL详解(二)
    [Oracle]
    怎样搭建轻量级架构-设计原则
    数据结构--队列
    opencv中各种矩阵乘的差别
    多重背包
    Linux管理员必须知道的sudo命令
    大二上學期學習生活總結
  • 原文地址:https://www.cnblogs.com/z5337/p/16511198.html
Copyright © 2020-2023  润新知