linux之进程 【百科全说】-凯发k8官方旗舰厅

腾讯视频/爱奇艺/优酷/外卖 充值4折起

在linux每执行一个二进制文件都会产生一个进程并生成一个进程pid。进程除了自身的id外,还有父进程id(ppid),所有进程的祖先进程是同一个进程,它叫做init进程,pid为1。

当用户从一个终端登陆时,便获得一个此次执行的bash进程的pid。用户执行的每一条指令都是这个pid的子进程。

linux通过fork-and-exec的流程来产生子进程:首先会通过父进程以复制 (fork) 的方式产生一个一模一样的子进程, 然后被复制出来的子进程再以 exec 的方式来运行实际要进行的程序,最终就成为一个子进程的存在。

僵尸进程:当该程序应该已经运行完毕,或者是因故应该要终止了,但是该程序的父程序却无法完整的将该程序结束掉,而造成那个程序一直存在内存当中,形成僵尸进程。

进程后台运行与暂停

通过在命令结尾加上&,可以时命令在后台运行而不影响前台。

通过[ctrl]-z可以将前台正在运行的进程暂停。

jobs

查看当前后台工作状态:

选项与参数:

-l :除了列出 job number 与命令串之外,同时列出 pid 的号码;

-r :仅列出正在背景 run 的工作;

-s :仅列出正在背景当中暂停 (stop) 的工作。[zsp@sky]~$ vim a

[1] 已停止 vim a

[zsp@sky]~$ vim b

[2] 已停止 vim b

[zsp@sky]~$ jobs

[1]- 已停止 vim a

[2] 已停止 vim b

那个 代表最近一个被暂停到后台的工作,且当执行fg命令时在后台下默认会被取用的那个工作。-代表最近最后第二个被暂停到后台中的工作号码

fg

将后台的工作拿出来处理

%可以指定处理哪一个后台任务

[zsp@sky]~$ fg

vim b

[2] 已停止 vim b

[zsp@sky]~$ jobs

[1]- 已停止 vim a

[2] 已停止 vim b

[zsp@sky]~$ fg %1

vim a

[1] 已停止 vim a

[zsp@sky]~$ jobs

[1] 已停止 vim a

[2]- 已停止 vim b

bg

让一个被暂停的任务在后台继续运行

kill

停止或重启后台任务

-l :这个是 l 的小写,列出目前 kill 能够使用的讯号 (signal) 有哪些?

-1 :重新读取一次参数的配置文件,启动被终止的进程;

-2 :代表与由键盘输入 [ctrl]-c 同样的动作;

-9 :立刻强制删除一个工作;

-15:以正常的程序方式终止一项工作。与 -9 是不一样的。

nohup

脱机执行后台进程

当后台任务正在执行时,若注销登录,那么任务也将停止。可以使用nohup来使任务在注销后继续执行。

nohup [命令与参数] &

ps

将某个时间点的进程运行情况列下来

选项与参数:

-a :所有的 process 均显示出来,与 -e 具有同样的效用;

-a :不与 terminal 有关的所有 process ;

-u :有效使用者 (effective user) 相关的 process ;

x :通常与 a 这个参数一起使用,可列出较完整资讯。

输出格式规划:

l :较长、较详细的将该 pid 的的资讯列出;

j :工作的格式 (jobs format)

-f :做一个更为完整的输出。

常用:

ps aux 列出系统所有的程序数据

ps -l 仅列出自己 bash 程序[zsp@sky]~$ ps -l

f s uid pid ppid c pri ni addr sz wchan tty time cmd

0 s 1000 1955 1948 0 80 0 - 6086 wait pts/0 00:00:00 bash

0 r 1000 2917 1955 0 80 0 - 2530 - pts/0 00:00:00 ps

从左到右各个字段意思

f:代表这个程序标志,说明这个程序的权限,常见号码有:

若为 4 表示此程序的权限为 root ;

若为 1 则表示此子程序仅进行复制(fork)而没有实际运行(exec)。

s:代表这个程序的状态 (stat),主要的状态有:

r (running):该程序正在运行中;

s (sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。

d :不可被唤醒的睡眠状态,通常这支程序可能在等待 i/o 的情况(ex>列印)

t :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;

z (zombie):僵尸状态,程序已经终止但却无法被移除至内存外。

uid/pid/ppid:代表此程序被该 uid 所拥有/程序的 pid 号码/此程序的父程序 pid 号码』

c:代表 cpu 使用率,单位为百分比;

pri/ni:priority/nice 的缩写,代表此程序被 cpu 所运行的优先顺序,数值越小代表该程序越快被 cpu 运行。

addr/sz/wchan:都与内存有关,addr 是 kernel function,指出该程序在内存的哪个部分,如果是个 running 的程序,一般就会显示-/ sz 代表此程序用掉多少内存 / wchan 表示目前程序是否运行中,同样的, 若为 - 表示正在运行中。

tty:登陆者的终端机位置,若为远程登陆则使用动态终端介面 (pts/n);

time:使用掉的 cpu 时间,注意,是此程序实际花费 cpu 运行的时间,而不是系统时间;

cmd:就是 command 的缩写,造成此程序的触发程序之命令为何。[zsp@sky]~$ ps aux | head -n 2

user pid %cpu %mem vsz rss tty stat start time command

root 1 0.0 0.1 24440 2416 ? ss 16:19 0:01 /sbin/init

root 2 0.0 0.0 0 0 ? s 16:19 0:00 [kthreadd]

从左到右各个字段意思

user:该 process 属於那个使用者帐号的?

pid :该 process 的程序识别码。

%cpu:该 process 使用掉的 cpu 资源百分比;

%mem:该 process 所占用的实体内存百分比;

vsz :该 process 使用掉的虚拟内存量 (kbytes)

rss :该 process 占用的固定的内存量 (kbytes)

tty :该 process 是在那个终端机上面运行,若与终端机无关则显示 ?,另外, tty1-tty6 是本机上面的登陆者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。

stat:该程序目前的状态,状态显示与 ps -l 的 s 标志相同 (r/s/t/z)

start:该 process 被触发启动的时间;

time :该 process 实际使用 cpu 运行的时间。

command:该程序的实际命令是什么

top

动态观列出进程的变化

相对与 ps 是列出一个时间点的程序状态, top 则可以持续侦测程序运行的状态

选项与参数:

-d :后面可以接秒数,就是整个进程画面更新的秒数。默认是 5 秒;

-b :以批量的方式运行top,通常会搭配数据流重导向来将批量的结果输出成为文件。

-n :与 -b 搭配,意义是,需要进行几次 top 的输出结果。

-p :指定某些个 pid 来进行观察监测而已。

在 top 运行过程当中可以使用的按键命令:

? :显示在 top 当中可以输入的按键命令;

p :以 cpu 的使用资源排序显示;

m :以 memory 的使用资源排序显示;

n :以 pid 来排序

t :由该 process 使用的 cpu 时间累积 (time ) 排序。

k :给予某个 pid 一个讯号 (signal)

r :给予某个 pid 重新制订一个 nice 值。

q :离开 top 软件的按键。

[zsp@sky]~$ top -d 3 -p 2308 -n 3 > top.txt

[zsp@sky]~$ cat top.txt

top - 17:47:09 up 1:27, 1 user, load average: 0.36, 0.51, 0.56

tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie

cpu(s): 0.8%us, 0.5%sy, 0.0%ni, 97.8%id, 0.8%wa, 0.0%hi, 0.0%si, 0.0%st

mem: 1965880k total, 1403864k used, 562016k free, 146084k buffers

swap: 2009084k total, 0k used, 2009084k free, 503384k cached

pid user pr ni virt res shr s %cpu %mem time command

2308 zsp 20 0 422m 41m 23m s 2 2.1 1:24.12 plugin-containe

每一行解释:

第一行(top...):

目前的时间,即是17:47:09 那个字段;启动到目前为止所经过的时间,即是 up 1:27那个字段;已经登陆系统的使用者人数,即是 1 user那个字段;系统在 1, 5, 15 分钟的平均工作负载。

第二行(tasks...):

显示的是目前程序的总量与个别程序在什么状态(running, sleeping, stopped, zombie)。

第三行(cpus...):显示的是 cpu 的整体负载,每个项目可使用 ?

第四行与第五行:表示目前的实体内存与虚拟内存 (mem/swap) 的使用情况。

第六行:这个是当在 top 程序当中输入命令时,显示状态的地方。

最后一行:每个 process 使用的资源情况。

pid :每个 process 的 id

user:该 process 所属的使用者;

pr :priority 的简写,程序的优先运行顺序,越小越早被运行;

ni :nice 的简写,与 priority 有关,也是越小越早被运行;

%cpu:cpu 的使用率;

%mem:内存的使用率;

time :cpu 使用时间的累加;

pstree

将进程之间的关系以树的形式显示出来

-a :各程序树之间的连接以 ascii 字节来连接;

-u :各程序树之间的连接以万国码的字节来连接。在某些终端介面下可能会有错误;

-p :并同时列出每个 process 的 pid;

-u :并同时列出每个 process 的所属帐号名称。

killall

根据进程名字管理进程

killall -signal 命令名称

-i :interactive 的意思,互动式的,若需要删除时,会出现提示字节给使用者;

-e :exact 的意思,表示『后面接的 command name 要一致』,但整个完整的命令

不能超过 15 个字节。

-i :命令名称(可能含参数)忽略大小写。

03/04 07:23
joe brockmeier 研究了 slackware linux init 进程。他讨论了系统如何初始化服务、各种运行级别是什么,以及如何从缺省安装中添加或除去服务来定制系统。 linux 用户正日益成熟,这意味着他们想要将系统配置成执行他们希望完成的任务。但目前 linux 发行版通常都附带了自动配置的设备和启动服务,如 sendmail 或 apache。这些发行版没有考虑到的是毫不更改其缺省设置来运行服务,如 apache -- 用户毫不知情 -- 会让黑客和利用脚本捣乱的人趁虚而入。
03/05 11:49
linux用户进程是如何释放内存的 linux进程使用内存的基本流程: 从图中我们可以看出,进程的堆,并不是直接建立在linux的内核的内存分配策略上的,而是建立在glibc的堆管理策略上的(也就是glibc的动态内存分配策略上),堆的管理是由glibc进行的。所以我们调用free对malloc得到的内存进行释放的时候,并不是直接释放给操作系统,而是还给了glibc的堆管理实体,而glibc会在把实际的物理内存归还给系统的策略上做一些优化,以便优化用户任务的动态内存分配过程。 那么glibc的堆
09/22 23:34
一、crond简介 概念 crond的概念和crontab是不可分割的。crontab是一个命令,常见于unix和类unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρ?νο?),原意是时间。而crond正是它的守护进程。 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统
10/19 05:48
本周开始,新手游进行删档封测阶段,前两天表现还好,今天更新后出现几次宕机行为,比较影响玩家的测试和体验,凯发k8官方旗舰厅的服务器管理系统尚未完善,为了晚上能够预防宕机造成损失,先用一种简单的方案临时顶替一下。 实现原理主要是使用linux提供的crontab机制,定时查询服务器进程是否存在,如果宕机则处理我们预设的脚本。 首先我们要向crontab加入一个新任务。 # crontab -e:进入编辑状态,其实就是使用vi编辑。 */1 * * * * sh /root/monitor.s
04/09 06:28
使用linux操作系统,难免遇到一些软件“卡壳”的问题,这时就需要使用linux下强大的kill命令来结束相关进程。这在linux系统下是极其容易的事情,你只需要kill xxx即可,这里xxx代表与此软件运行相关的进程pid号。 首先,我们需要使用linux下另外一个命令ps查找与进程相关的pid号:ps aux | grep program_filter_word 1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。 2)ps -a 显示所有程序。 3)ps c 列出程序时,显示每
07/15 02:41
linux kill 命令使用详解 功能说明:删除执行中的程序或工作。 语法:kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>] 补充说明:kill可将指定的信息送至程序。预设的信息为sigterm(15),可将指定程序终止。若仍无法终止该程序,可使用sigkill(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或jobs指令查看。 参数:  -l <信息编号>  若不加<信息编号>选项,则-l参
12/03 03:48
在linux中误删除了某个文件,但是 ps-ef|grep 文件名 发现某个进程还在使用该文件,那么可以通 过以下方式恢复文件。 例如: 创建一个简单文件/tmp/test.txt, 随便向里面写点内容 两个client模拟,client1 负责打开文件less /tmp/test.txt(模拟占用线程) client2 负责恢复文件 恢复步骤(均在client2上执行) 1. 查看/tmp/test.txt被占用的进程id [root@host tmp]# ps -ef|grep test.t
12/25 16:51
linux在启动一个进程时,系统会在/proc下创建一个以pid命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径,通过ll或ls –l命令即可查看。 ll /proc/pid cwd符号链接的是进程运行目录; exe符号连接就是执行程序的绝对路径; cmdline就是程序运行时输入的命令行命令; environ记录了进程运行时的环境变量; fd目录下是进程打开或使用的文件的符号连接。
12/24 03:37
当你在 多核 numa 处理器上运行需要较高性能的 hpc(高性能计算)程序或非常消耗网络资源的程序时,cpu/memory 的亲和力是限度其发挥最大性能的重要因素之一.在同一 numa 节点上调度最相关的进程可以减少缓慢的远程内存访问.像英特尔 sandy bridge 处理器,该处理器有一个集成的 pcie 控制器,你可以在同一 numa 节点上调度网络 i/o 负载(如网卡)来突破 pci 到 cpu 亲和力限制. 作为性能优化和故障排除的一部分,你可能想知道特定的进程被调度到哪个 cpu
网站地图