Linux运维基础进程管理及环境组成分析

 更新时间:2021年09月06日 16:27:14   作者:神慕蔡蔡  
这篇文章主要为大家介绍了Linux运维基础,对其中进程管理及环境组成分析作了详细的分析,有需要的朋友可以借鉴参考下,希望可以有所帮助

1.进程基本概述

进程是已启动的可执行程序的运行中实例。

/proc目录下以数字为名的目录,每一个目录代表一个进程,保存着进程的属性信息。

每一个进程的PID是唯一的,就算进程退出了,其它进程也不会占用其PID

2.进程的组成部分

  •  已分配内存的地址空间
  • 安全属性,包括所有权凭据和特权
  • 程序代码的一个或多个执行线程
  • 进程状态

3.进程的环境

  • 本地和全局变量
  • 当前调度上下文
  • 分配的系统资源,如文件描述符和网络端口

4.进程状态

标志 内核定义的状态名称和描述
R TASK_RUNNING:进程正在CPU上执行,或者正在等待运行。处于运行中(或可运行)状态时,进程可能正在执行用户例程或内核例程(系统调用),或者已排队并就绪
S TASK_INTERRUPTIBLE:进程处于睡眠状态且正在等待某一条件:硬件请求、系统资源访问或信号。当事件或信号满足该条件时,该进程将返回到运行中
D TASK_UNINTERRUPTIBLE:此进程也在睡眠,但与S状态不同,不会响应传递的信号。仅在特定的条件下使用,其中进程中断可能会导致意外的设备状态
K TASK_KILLABLE:进程处于睡眠状态,与不可中断的D状态相同,但有所修改,允许等待中的任务通过响应信号而被中断(彻底退出)。实用程序通常将可中断的进程显示为D状态
T TASK_STOPPED:进程已被停止(暂停),通常是通过用户或其他进程发出的信号。进程可以通过另一信号返回到运行中状态,继续执行(恢复)
T TASK_TRACED:正在被调试的进程也会临时停止,并且共享同一个T状态标志
Z EXIT_ZOMBIE:子进程在退出时向父进程发出信号。除进程身份(PID)之外的所有资源都已释放
X EXIT_DEAD:当父进程清理(获取)剩余的子进程结构时,进程现在已彻底释放。此状态从不会在进程列出实用程序中看到
< 高优先级进程
N 低优先级进程
+ 前台进程组中的进程
l 多线程进程
s 会话进程首进程

5.进程优先级

  • <0-139>:数字越小,优先级越高!
  • <0-99>:实时优先级,内核调整
  • <100-139>:静态优先级,用户可控制

6.进程管理命令

ps命令用于列出当前的进程。可以显示详细的进程信息

[root@localhost ~]# ps -e
    PID TTY          TIME CMD
      1 ?        00:00:02 systemd
      2 ?        00:00:00 kthreadd


[root@localhost ~]# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.6 179032 13504 ?        Ss   Nov03   0:02 /usr/lib/syst
root           2  0.0  0.0      0     0 ?        S    Nov03   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   Nov03   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   Nov03   0:00 [rcu_par_gp]
root           6  0.0  0.0      0     0 ?        I<   Nov03   0:00 [kworker/0:0H
root           8  0.0  0.0      0     0 ?        I<   Nov03   0:00 [mm_percpu_wq
root           9  0.0  0.0      0     0 ?        S    Nov03   0:00 [ksoftirqd/0]
root          10  0.0  0.0      0     0 ?        R    Nov03   0:00 [rcu_sched]
root          11  0.0  0.0      0     0 ?        S    Nov03   0:00 [migration/0]
root          12  0.0  0.0      0     0 ?        S    Nov03   0:00 [watchdog/0]
root          13  0.0  0.0      0     0 ?        S    Nov03   0:00 [cpuhp/0]
root          15  0.0  0.0      0     0 ?        S    Nov03   0:00 [kdevtmpfs]
root          16  0.0  0.0      0     0 ?        I<   Nov03   0:00 [netns]
root          17  0.0  0.0      0     0 ?        S    Nov03   0:00 [kauditd]
root          18  0.0  0.0      0     0 ?        S    Nov03   0:00 [khungtaskd]
root          19  0.0  0.0      0     0 ?        S    Nov03   0:00 [oom_reaper]
root          20  0.0  0.0      0     0 ?        I<   Nov03   0:00 [writeback]
root          21  0.0  0.0      0     0 ?        S    Nov03   0:00 [kcompactd0]
root          22  0.0  0.0      0     0 ?        SN   Nov03   0:00 [ksmd]
root          23  0.0  0.0      0     0 ?        SN   Nov03   0:00 [khugepaged]
root          24  0.0  0.0      0     0 ?        I<   Nov03   0:00 [crypto]
root          25  0.0  0.0      0     0 ?        I<   Nov03   0:00 [kintegrityd]
root          26  0.0  0.0      0     0 ?        I<   Nov03   0:00 [kblockd]
root          27  0.0  0.0      0     0 ?        I<   Nov03   0:00 [tpm_dev_wq]
root          28  0.0  0.0      0     0 ?        I<   Nov03   0:00 [md]
root          29  0.0  0.0      0     0 ?        I<   Nov03   0:00 [edac-poller]
root          30  0.0  0.0      0     0 ?        S    Nov03   0:00 [watchdogd]
root          47  0.0  0.0      0     0 ?        S    Nov03   0:00 [kswapd0]
root         140  0.0  0.0      0     0 ?        I<   Nov03   0:00 [kthrotld]
root         141  0.0  0.0      0     0 ?        S    Nov03   0:00 [irq/24-pcieh
root         142  0.0  0.0      0     0 ?        S    Nov03   0:00 [irq/25-pcieh
root         143  0.0  0.0      0     0 ?        S    Nov03   0:00 [irq/26-pcieh
root         144  0.0  0.0      0     0 ?        S    Nov03   0:00 [irq/27-pcieh
root         145  0.0  0.0      0     0 ?        S    Nov03   
[root@localhost ~]# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 Nov03 ?        00:00:02 /usr/lib/systemd/systemd --s
root           2       0  0 Nov03 ?        00:00:00 [kthreadd]
root           3       2  0 Nov03 ?        00:00:00 [rcu_gp]
root           4       2  0 Nov03 ?        00:00:00 [rcu_par_gp]
root           6       2  0 Nov03 ?        00:00:00 [kworker/0:0H-k

7.vmstat

虚拟内存状态查看命令

vmstat 1000 //表示每1000秒刷新一次
vmstat 1000 5 //表示每1000秒刷新一次,刷新5次后退出

[root@localhost ~]# vmstat 1000
procs:
    r(running)  //表示等待运行的队列长度,也即等待运行的进程的个数
    b(block)    //表示阻塞队列长度,也即处于不可中断睡眠态的进程个数
memory:
    swpd        //交换内存的使用总量
    free        //空闲物理内存总量
    buffer      //用于buffer的内存总量
    cache       //用于cache的内存总量
swap:
    si(swap in)     //表示从物理内存有多少页面换进swap,也即数据进入swap的数据速率(kb/s)
    so(swap out)    //表示从swap有多少页面换进物理内存,也即数据离开swap的数据速率(kb/s)
io:
    bi(block in)    //表示磁盘块有多少个被调入内存中,也即从块设备读入数据到系统的速率(kb/s)
    bo(block out)   //表示有多少个磁盘块从内存中被同步到硬盘上去了,也即保存数据至块设备的速率(kb/s)
system:
    in( interrupts)     //表示中断的个数,也即中断速率(kb/s)
    cs(context switch)  //表示上下文切换的次数,也即进程切换速率(kb/s)
CPU:
    us      //表示用户空间
    sy      //表示内核空间
    id      //表示空闲百分比
    wa      //表示等待IO完成所占据的时间百分比
    st      //表示steal,被虚拟化技术偷走的时间(比如运行虚拟机)

8.后台运行作业

//在命令后跟上&符号可以生成一个后台作业
[root@localhost ~]# sleep 1000 &
[1] 1400
//jobs命令用于显示当前所有的后台作业
[root@localhost ~]# jobs
[1]+  Running                 sleep 1000 &
//fg命令用于将后台作业调至前台运行
[root@localhost ~]# fg
//当只有一个后台作业时,直接使用fg命令,不跟任何参数即可将后台作业调至前台运行,但是当有多个作业时则必须跟上%+作业号,也就是上面命令执行结果中以[]括起来的数字。
[root@localhost ~]# jobs
[1]-  Running                 sleep 1000 &
[2]+  Running                 sleep 500 &
[root@localhost ~]# fg %1
//使用ctrl+z可将前台进程发送到后台,此时作业将处于停止状态
[root@localhost ~]# fg %1
sleep 1000
^Z
[1]+  Stopped                 sleep 1000
//使用bg命令+作业号可使后台已停止的作业重新运行
[root@localhost ~]# bg %1
[1]+ sleep 1000 &
[root@localhost ~]# jobs
[1]-  Running                 sleep 1000 &
[2]+  Running                 sleep 500 &
//kill加上作业号可以手动杀死指定作业
[root@localhost ~]# jobs
[1]-  Running                 sleep 1000 &
[2]+  Running                 sleep 500 &
[root@localhost ~]# kill %1
[1]-  Terminated              sleep 1000
[root@localhost ~]# jobs
[2]+  Running                 sleep 500 &
//jobs命令的结果中
    +       //命令将默认操作的作业
    -     //命令将第二个默认操作的作业

以上就是Linux运维基础进程管理及环境组成分析的详细内容,更多关于Linux进程管理及环境组成的资料请关注脚本之家其它相关文章!

相关文章

  • linux设置tomcat自启动的方法

    linux设置tomcat自启动的方法

    这篇文章主要介绍了linux设置tomcat自启动的方法,需要的朋友可以参考下
    2014-03-03
  • Linux中利用grep命令如何检索文件内容详解

    Linux中利用grep命令如何检索文件内容详解

    这篇文章主要给大家介绍了关于Linux中利用grep命令如何检索文件内容的相关资料,并且给大家简单介绍了关于Linux grep和find的区别,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-11-11
  • Ubuntu Apahce2.4下无法访问JS目录的问题解决

    Ubuntu Apahce2.4下无法访问JS目录的问题解决

    这篇文章主要给大家介绍了如何解决Ubuntu Apahce2.4下无法访问JS目录的问题,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • Ubuntu终端多窗口分屏Terminator

    Ubuntu终端多窗口分屏Terminator

    今天小编就为大家分享一篇关于Ubuntu终端多窗口分屏Terminator的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Linux用户管理与常见权限命令

    Linux用户管理与常见权限命令

    在Linux系统中,用户和组是管理权限和资源访问的基本单元,用户可以属于一个或多个组,组用于集中管理一组用户的权限,文件权限决定了用户或组对文件的访问级别,每个文件或目录都有三个权限集,分别适用于文件所有者(User)、所属组(Group)和其他用户(Others)
    2024-08-08
  • linux下实现VPS免费备份脚本

    linux下实现VPS免费备份脚本

    因为本bolg是架设在vps上的,空间商又没有提供备份的功能,所以说哪天vps挂了,我的网站也就跟着挂了
    2012-05-05
  • Apache的fork模式和worker模式判断方法

    Apache的fork模式和worker模式判断方法

    这篇文章主要介绍了Apache的fork模式和worker模式判断方法,文中给出的方法基于http,需要的朋友可以参考下
    2015-07-07
  • 详解linux下避免僵尸进程的几种方法

    详解linux下避免僵尸进程的几种方法

    本篇文章主要介绍了详解linux下避免僵尸进程的几种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Apache和Tomcat有什么区别_动力节点Java学院整理

    Apache和Tomcat有什么区别_动力节点Java学院整理

    Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别。下面通过本文给大家介绍Apache和Tomcat的区别,感兴趣的朋友一起看看吧
    2017-08-08
  • linux定时任务的一些相关操作汇总

    linux定时任务的一些相关操作汇总

    这篇文章主要给大家介绍了关于linux定时任务的一些相关操作,文中通过示例代码介绍的非常详细,对大家学习或者使用linux系统组件具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05

最新评论