【Linux进阶篇】程序与进程

简介: 【Linux进阶篇】程序与进程

程序 ( program )

       通常为 binary program ,放置在储存媒体中(如硬盘、光盘、软盘、磁带等),为实体文件的型态存在;二进制文件,比如静态 /bin/date,/usr/sbin/httpd,/usr/sbin/sshd,/usr/local/nginx/sbin/nginx;

进程 ( process )

       程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中,操作系统并给予这个内存内的单元一个识别码 ( PID ),可以说,进程就是一个正在运行中的程序。是程序运行的过程,动态,有生命周期及运行状态。

进程调用

       一个进程通过fork()函数,创建一个和自己一样的进程。被创建出来的进程是子进程,而创建子进程的进程就是父进程子进程是父进程的一个副本,是它的复制,两者不共享地址空间(内存)。

程序调用的流程 fork and exec

       其实子程序与父程序之间的关系还挺复杂的,最大的复杂点在于程序互相之间的调用。在 Linux 的程序调用通常称为 fork-and-exec 的流程程序都会借由父程序以复制 ( fork )的方式产生一个一模一样的子程序, 然后被复制出来的子程序再以 exec的方式来执行实际要进行的程序,最终就成为一个子程序的存在。

1. echo $$         #查看当前进程ID
2. echo $PPID      #查看父进程ID

       僵尸进程 一个进程使用fork创建子进程,如果父进程退出,子进程没有退出,没有父进程统一管理和结束,所占资源无法释放。 进程的属性

1. 进程ID:PID 唯一的值,用来区分进程
2. 父进程的ID: PPID 
3. 启动进程的用户ID(UID)和所属组(GID)
4. 进程状态:运行R  休眠S 僵尸Z
5. 进程执行的优先级
6. 进程所连接的终端名
7. 进程资源占用:内存、cpu占用量

进程静态查看工具-ps

       用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序

       选项: a: 显示当前终端关联的所有进程 u:基于用户的格式显示 x: 显示所有进程,不以终端来区分,通常与a这个参数一起使用。 -e:显示所有程序,与-A具有同样的效果 -l或l(小写L):采用详细的格式来显示程序状况。 -f:显示UID,PPIP,C与STIME栏位。 -j或j:采用工作控制的格式显示程序状况。(jobs format)

常用方法

ps aux

1. [root@pro ~]# ps aux                #观察系统所有程序数据
2. SER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
3. root          1  0.1  0.4 194376  4016 ?        Ss   10:47   0:04 /usr/lib/systemd/systemd 
4.
#参数如下 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)     R:runing 运行态     S:可中断睡眠态     D:不可中断睡眠态     T:停止态     Z:僵尸态     s:表示这个进程是个领导者进程     +:该进程为前台进程     l:该进程是多线程进程     N:低优先级进程     <: 高优先级进程     []: 表示这个一个内核线程 START :该 process 被触发启动的时间; TIME :该 process 实际使用 CPU 运行的时间 COMMAND :该程序的实际指令为何 注:最后一列用[]括起来的进程是内核态进程,无[]的是用户态进程

ps -l

1. [root@pro ~]# ps -l             #仅观察和登录者相关的程序
2. F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
3. 4 S     0   8989   8985  0  80   0 - 29222 do_wai pts/1    00:00:00 bash

#参数如下

F :代表这个程序旗标 ( process flags ),说明这个程序的总结权限,常见号码:

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

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

S :代表这个程序的状态 ( STAT )

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 的缩写,造成此程序的触发程序之指令为何。

pstree -p

[root@pro ~]# pstree -p             #显示进程树形结构

进程动态查看工具-top

       可以持续的监测整个系统的程序工作状态。每次更新程序资源的时间为5秒,可以使用 -d 来进行修改。

[root@pro ~]# top -d 2              #每隔2秒刷新一次

#参数如下:

M   按内存排比

P   按cpu排比

T   按时间排比


us — 用户空间占用CPU的百分比。

sy — 内核空间占用CPU的百分比。

ni — 改变过优先级的进程占用CPU的百分比

id — 空闲CPU百分比

wa — IO等待占用CPU的百分比

hi — 硬中断(Hardware IRQ)占用CPU的百分比

si — 软中断(Software Interrupts)占用CPU的百分比

st ---虚拟cpu等待实际cpu的时间百分比

       top 默认使用 CPU 使用率( %CPU ) 作为排序的重点,如果你想要使用内存使用率排序,则可以按 “M”, 若要恢复则按 “P” 即可。如果想要离开top 则按 “ q ” 。若将 top 的信息进行2次,然后输出到/top/top.txt

[root@pro ~]# top -b -n 2 > /tmp/top.txt

进程的前后台调动

       前台:你可以控制与下达指令的这个环境称为前景的工作 (foreground ) 后台:可以自行运行的工作,无法使用 ctrl+c 终止他,可使用 bg/fg 调用该工作

ctrl + z  把前台进程调到后台停止执行

&  把前台进程调到后台继续执行 例:复制大文件时,在末尾输入一个&符号,将在后台运行复制命令

[root@pro ~]# cp /dev/cdrom /root/centos7.iso &

jobs

[root@pro ~]# jobs          #查看后台工作状态

#参数如下

   -l:显示进程号;

   -p:仅任务对应的显示进程号;

   -n:显示任务状态的变化;

   -r:仅输出运行状态(running)的任务;

   -s:仅输出停止状态(stoped)的任务。


1. [root@pro ~]# fg            #将后台任务拿到前台处理    
2. [root@pro ~]# bg            #将后台暂停任务继续执行

kill

1. kill     进程号        #仅杀死某个进程号的进程
2. killall  进程名        #杀死进程名开启的所有进程和子进程
3. pkill -u lisi         #杀死满足条件的进程
4.     -9                #强制
5.     -15               #正常结束,默认 
6.     -l                #列出所有信号
7.     0   status        #状态
8.     1   SIGHUP        #重载
9.     2   SIGINT        #终止,Ctrl+c
10.     3   SIGQUIT       #退出
11.     9   SIGKILL       #强制终止
12.     15  SIGTERM       #正常结束,默认
13.     18  SIGCONT       #继续
14.     19  SIGSTOP       #停止 
15.     20  SIGTSTP       #暂停,ctrl+z

改变进程优先级

PRI :进程优先权,代表这个进程可被执行的优先级,其值越小,优先级就越高,越早被执行

NI :进程Nice值,代表这个进程的优先值,-20到19,PRI(new)=PRI(old)+nice

%nice :改变过优先级的进程的占用CPU的百分比

命令:

1. nice -n -5 vim &        #指定执行命令的nice值
2. renice -5 进程号         #修改已运行进程的nice值

screen 虚拟窗口管理器

       建立稳定的远程管理会话,远程执行长时间操作,比如:数据库的备份,数据量较大,ssh远程连接中断,备份也会中止。

[root@pro ~]# yum -y install screen

(1)要进行某项操作时,先使用命令创建一个Screen:

[root@pro ~]# screen -S test

(2)接着就可以在里面进行操作了,如果你的任务还没完成就要走开的话,使用命令保留Screen:

1. Ctrl+a+d                    #按Ctrl+a,然后再按d即可保留Screen
2. [detached]                  #这时会显示出这个提示,说明已经保留好Screen了

如果你工作完成的话,就直接输入:

1. exit                        #这样就表示成功退出了
2. [screen is terminating]

(3)如果你上一次保留了Screen,可以使用命令查看:

1. [root@pro ~]# screen -ls
2. There is a screen on:
3.         10094.test      (Attached)
4. 1 Socket in /var/run/screen/S-root.

(4)恢复Screen,使用命令:

[root@pro ~]# screen -r test

#Screen命令中用到的快捷键

Ctrl+a c :创建窗口

Ctrl+a w :窗口列表

Ctrl+a n :下一个窗口

Ctrl+a p :上一个窗口

Ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换

Ctrl+a K(大写) :关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)

exit :关闭当前窗口,并且切换到下一个窗口(当退出最后一个窗口时,该终端自动终止,并且退回到原始shell状态)

Ctrl+a d :退出当前终端,返回加载screen前的shell命令状态

nohup 离线管理

其效果等同于screen

1. cat >> sleep500.sh << EOF
2. #!/bin/bash 
3. /bin/sleep 500s 
4. /bin/echo "I have slept 500 seconds."
5. EOF
6. 
7. chmod +x sleep500.sh
8. nohup ./sleep500.sh &

设置来电自启

进入BIOS

1、首先进入Power Management Setup(电源管理设定)→Power Again(再来电状态),此项决定了开机时意外断电之后,电力供应恢复时系统电源的状态。设定值有: Power Off(保持系统处于关机状态) Power On(保持系统处于开机状态) Last State(恢复到系统断电前的状态)

2、首先进入BIOS的设置主界面,选择[POWER MANAGEMENT SETUP],再选择[PWR Lost Resume State],这一项有三个选择项: [Keep OFF]项,代表停电后再来电时,电脑不会自动启动。 [Turn On]项,代表停电后再来电时,电脑会自动启动。 [Last State],那么代表停电后再来电时,电脑恢复到停电前电脑的状态。

3、有的BIOS中[POWER MANAGEMENT SETUP]没有上面说的[PWR Lost Resume State],可以在[PWRON After PWR-Fail]→[Integrated Peripherals]选项中找到两个选项: ON(打开自动开机) OFF(关闭自动开机)

4、各个主板BIOS不同,找到关于电源POWER的项,进入,例如: Power Management Setup项下 AC Back Function (来电复位功能) 选择 Full-On 项

5、另有一些BIOS,这样设置: Integrated Peripherals 集成外围设备 SuperIO Device Restore On AC Power Loss Power Off Power On Last State

设置定时开机

进入BIOS

Power Management Setup #电源管理

Wake Up Event Setup #叫醒事件

Resume By RTC Alarm   #报警设置

Date #设定时间 HH:MM:SS

恢复误删除文件(仅限于centos6

ext3: 恢复命令 ext3grep

ext4: 恢复命令 extundelete

windows: final data、easyrecovery

服务器基础知识

服务器高度单位:U 1U=4.445厘米

常见品牌:2U Dell R730 R740 R750 惠普(HP)DL388Gen10/DL380G10 浪潮(INSPUR) NF5280 M5 华为(HUAWEI) 2288HV5


相关文章
|
5月前
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
248 67
|
4月前
|
Web App开发 Linux 程序员
获取和理解Linux进程以及其PID的基础知识。
总的来说,理解Linux进程及其PID需要我们明白,进程就如同汽车,负责执行任务,而PID则是独特的车牌号,为我们提供了管理的便利。知道这个,我们就可以更好地理解和操作Linux系统,甚至通过对进程的有效管理,让系统运行得更加顺畅。
130 16
|
4月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
105 20
|
3月前
|
监控 Shell Linux
Linux进程控制(详细讲解)
进程等待是系统通过调用特定的接口(如waitwaitpid)来实现的。来进行对子进程状态检测与回收的功能。
81 0
|
3月前
|
存储 负载均衡 算法
Linux2.6内核进程调度队列
本篇文章是Linux进程系列中的最后一篇文章,本来是想放在上一篇文章的结尾的,但是想了想还是单独写一篇文章吧,虽然说这部分内容是比较难的,所有一般来说是简单的提及带过的,但是为了让大家对进程有更深的理解与认识,还是看了一些别人的文章,然后学习了学习,然后对此做了总结,尽可能详细的介绍明白。最后推荐一篇文章Linux的进程优先级 NI 和 PR - 简书。
113 0
|
3月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
79 0
|
3月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
79 0
|
6月前
|
Linux 数据库 Perl
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。
|
6月前
|
存储 Linux 调度
【Linux】进程概念和进程状态
本文详细介绍了Linux系统中进程的核心概念与管理机制。从进程的定义出发,阐述了其作为操作系统资源管理的基本单位的重要性,并深入解析了task_struct结构体的内容及其在进程管理中的作用。同时,文章讲解了进程的基本操作(如获取PID、查看进程信息等)、父进程与子进程的关系(重点分析fork函数)、以及进程的三种主要状态(运行、阻塞、挂起)。此外,还探讨了Linux特有的进程状态表示和孤儿进程的处理方式。通过学习这些内容,读者可以更好地理解Linux进程的运行原理并优化系统性能。
238 4
|
6月前
|
Linux Shell
Linux 进程前台后台切换与作业控制
进程前台/后台切换及作业控制简介: 在 Shell 中,启动的程序默认为前台进程,会占用终端直到执行完毕。例如,执行 `./shella.sh` 时,终端会被占用。为避免不便,可将命令放到后台运行,如 `./shella.sh &`,此时终端命令行立即返回,可继续输入其他命令。 常用作业控制命令: - `fg %1`:将后台作业切换到前台。 - `Ctrl + Z`:暂停前台作业并放到后台。 - `bg %1`:让暂停的后台作业继续执行。 - `kill %1`:终止后台作业。 优先级调整:
339 5