在linux中进程process表示的是,linux中关于进程那些事

进程(Process)是系统进行资源分配和调度的基本单位,一个进程是一个程序的运行实例。而在Linux中,可以使用一个进程来创建另外一个进程。

进程和程序是有本质区别的:

进程是一个程序的一次执行过程,同时也是资源分配的最小单元。

程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念;

而进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和消亡的整个过程。

Linux操作系统包括三种不同类型的用户进程,每种类型的进程都有自己的特点和属性。

(1) 交互进程——由shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。

(2) 批处理进程——这种进程和终端没有联系,它是被提交到一个队列中的进程序列。

(3) 守护进程——又称监控进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。

一,进程的创建

在Linux中主要提供了fork、vfork、clone三个进程创建方法。

在linux源码中这三个调用的执行过程是执行fork(),vfork(),clone()时,通过一个系统调用表映射到sys_fork(),sys_vfork(),sys_clone(),再在这三个函数中去调用do_fork()去做具体的创建进程工作。

fork出来的子进程是父进程的一个拷贝,即,子进程从父进程得到了数据段和堆栈段的拷贝,这些需要分配新的内存;而对于只读的代码段,通常使用共享内存的方式访问;而vfork则是子进程与父进程共享内存空间, 子进程对虚拟地址空间任何数据的修改同样为父进程所见;clone则由用户通过参clone_flags 的设置来决定哪些资源共享,哪些资源拷贝。

二,进程的查看和调用

命令:pstree,ps,top

pstree命令以树状图显示进程间的关系。ps命令可以显示当前正在运行的那些进程的信息,但是对于它们之间的关系却显示得不够清晰。

1.pstree display a tree of processes

以树状图显示进程,只显示进程的名字,且相同进程合并显示。

参数:-p 显示进程号

[[email protected] 桌面]# pstree

systemd─┬─ModemManager───2*[{ModemManager}]

├─NetworkManager─┬─dhclient

│ └─2*[{NetworkManager}]

├─2*[abrt-watch-log]

[[email protected] 桌面]# pstree -p

systemd(1)─┬─ModemManager(828)─┬─{ModemManager}(882)

│ └─{ModemManager}(895)

├─NetworkManager(928)─┬─dhclient(7190)

│ ├─{NetworkManager}(943)

│ ├─{NetworkManager}(945)

│ └─{NetworkManager}(10036)

2.ps process snapshot

显示瞬间的进程的状态

参数: -a -u -x -e -l -f

u: 以用户为中心组织进程状态信息显示

a: 与终端相关的进程;

x: 与终端无关的进程;

e: 显示所有进程

f: 显示完整格式程序信息

l: 长格式显示

[[email protected] 桌面]# ps

进程号 终端设备 占用cpu处理时间 命令

PID TTY TIME CMD

8232 pts/1 00:00:00 bash

9895 pts/1 00:00:00 bash

10335 pts/1 00:00:00 ps

TTY 终端设备teletype

pts(虚拟终端pseudo-tty)

pts(pseudo-terminal slave)是pty的实现方法,是伪终端

[[email protected] 桌面]# ps aux //BSD风格

用户 进程号 cpu 内存 虚拟内存 常驻内存 终端 进程状态 开始 时间 命令

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.1 193704 6868 ? Ss 10:56 0:03 /usr/lib/system

root 2 0.0 0.0 0 0 ? S 10:56 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S 10:56 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S< 10:56 0:00 [kworker/0:0H]

[[email protected] 桌面]# ps -elf //标准风格

状态 用户 进程 父进程 cpu 优先级 nice值 地址

F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD

4 S root 1 0 0 80 0 - 48426 ep_pol 10:56 ? 00:00:03 /usr/lib/systemd/system

1 S root 2 0 0 80 0 - 0 kthrea 10:56 ? 00:00:00 [kthreadd]

1 S root 3 2 0 80 0 - 0 smpboo 10:56 ? 00:00:00 [ksoftirqd/0]

进程的5中状体:

R:running 运行

S: interruptable sleeping 中断

D: uninterruptable sleeping 不可中断

T: stopped 停止

Z: zombie 僵死

3.top display linux processes

动态显示系统进程状态 -d 刷新秒数 -U用户

top交互操作命令

? 帮助

P 降序查看cpu

M 降序查看内存

T 降序查看进程占用时间

k 杀死进程

q 退出

[[email protected] 桌面]# top

当前时间 运行时间 用户个数 负载: 1分钟 5分钟 15分钟 //uptime查看也可以

top - 15:31:30 up 4:35, 3 users, load average: 0.53, 0.55, 0.43

Tasks: 254 total, 1 running, 253 sleeping, 0 stopped, 0 zombie

%Cpu(s): 3.0 us, 0.7 sy, 0.0 ni, 96.2 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem : 3936028 total, 226112 free, 1692012 used, 2017904 buff/cache

KiB Swap: 4063228 total, 4063228 free, 0 used. 1627952 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

3797 root 20 0 2144524 300668 72032 S 10.0 7.6 20:49.80 Web Content

注:

用cttl + z把占用终端的进程打入后台,jobs命令可用来查看被打入后台的进程,fg 可把进程调回前台,bg 可将后台暂停的进程运行。

三,进程的优先级

命令:nice和renice

内核使用一些简单的数值范围0~139表示内部优先级, 数值越低, 优先级越高。

从0~99的范围专供实时进程使用, nice的值[-20,19]则映射到范围100~139

静态优先级:100-139,数字越小,优先级越高

进程默认启动时的nice值为0,优先级为120,nice值的范围是(-20,19)

61bad2b0ef2178b0b30460dc7932489a.png

nice命令:启动进程时,以指定优先级运行

nice [OPTION] [COMMAND [ARG]...],例如:nice -n 5 htop

renice命令:对已处于运行态的进程,调整优先级

renice [-n] priority pid...,例如: renice -n 2 3618

查看进程的优先级:

[[email protected] 桌面]# ps axo pid,comm,ni,pri

PID COMMAND NI PRI

1 systemd 0 19

2 kthreadd 0 19

3 ksoftirqd/0 0 19

5 kworker/0:0H -20 39

四,杀死进程

命令:

kill,pkill,killall (-9 强制删除)

格式:

kill pid (进程名)

killall 进程名

pkill 查找条件

killall和pkill是相似的,不过如果给出的进程名不完整,killall会报错。pkill或者pgrep只要给出进程名的一部分就可以终止进程。

[[email protected] 桌面]# firefox

[[email protected] 桌面]# pgrep firefox

3773

[[email protected] 桌面]# pgrep firefox | xargs kill //pkill=pgrep+kill

[[email protected] 桌面]# pkill firefo //不写全也可以杀掉进程

[[email protected] 桌面]# killall firefo // 如果写成firefox就可以杀掉

firefo: no process found

[[email protected] 桌面]# w //查看哪些用户登录

09:27:15 up 6 min, 4 users, load average: 0.03, 0.25, 0.16

USER TTY FROM [email protected] IDLE JCPU PCPU WHAT

root :0 :0 09:22 ?xdm? 27.63s 0.12s gdm-session-wor

root pts/0 :0 09:23 3.00s 0.11s 0.03s w

root pts/1 :0 09:24 11.00s 0.05s 0.01s ssh [email protected]

lu pts/2 localhost 09:27 3.00s 0.01s 0.01s -bash

[[email protected] 桌面]# pkill -U lu //把用户踢出

共勉:I hear and I forget. I see and I remember. I do and I understand!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Linux 进程可能是僵尸进程或僵死进程。 僵尸进程是一种已经结束运行但还没有被父进程回收的进程。当父进程没有调用 wait 或 waitpid 函数来回收子进程的结束状态时,子进程就会成为僵尸进程。僵尸进程在系统仍占用一些资源,但是它的代码已经不会再被执行。 僵死进程是一种无法再终止的进程。当一个进程的父进程已经终止,而这个进程没有被重新分配给其他的父进程时,它就成为了僵死进程。僵死进程不会占用系统资源,但是它仍然占用着进程的一个项目。 ### 回答2: 在Linux进程既可以是僵尸进程(zombie process)也可以是僵死进程(dead process)。 僵尸进程是指一个子进程已经结束运行,但是父进程还没有处理该子进程的终止状态信息。这种状态下的子进程会被内核保留,并在进程记录一段时间。僵尸进程不占用系统的资源,但是会占用一个进程ID(PID),因此如果有大量僵尸进程存在,可能会导致系统PID耗尽。处理僵尸进程的常见方法是父进程调用wait或waitpid函数来处理子进程的状态,释放其资源,并将其从进程删除。 僵死进程是指一个进程已经终止运行并且无法正常释放资源。这可能是因为进程在结束时未正确释放资源的问题,或者由于系统故障导致进程被异常终止。僵死进程会一直占用系统的资源,包括内存和文件描述符等。要解决僵死进程,可以通过重启系统来清除它们,或者通过手动终止占用资源的进程来释放资源。 因此,Linux既存在僵尸进程又存在僵死进程。僵尸进程是指子进程结束但父进程未处理的进程状态信息,而僵死进程是指已经结束但无法正常释放资源的进程。处理僵尸进程需要父进程主动回收子进程,而对于僵死进程通常需要进行系统重启或手动终止进程来解决。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值