欢迎光临
我们一直在努力

Linux学习日志-20260114-进程管理

linux进程管理

进程管理

进程基础(当程序被加载到内存当中去被执行就称为进程)

在linux中每一个执行的程序都被称为进程,然后每一个进程都会被分配一个ID号。

每个进程会分为前台进程后台进程,前台进程是用户在屏幕上看到的可以操作的,后台进程是实际操作的,但在屏幕上无法看到。

之前就曾经尝试过使用ps指令:ps aux来观察现在所有用户进程,其中的PID就是process ID。

PS指令

ps指令用于查看目前系统中正在执行的进程;

ps -a :显示当前终端所有进程信息;

ps -u :以用户的格式显示进程信息;

ps -x :显示后台进程运行的参数;

通常还会配合管道指令筛选我们想要查找的运行进程;

ps -ef :e代表全部进程,f代表全格式显示;

这样可以看出,sshd的PID是1155,它的父进程PID是1,也就是systemd系统后台进程。

可以看到1号进程它的PPID是0也就是说这个进程没有父进程。

父子进程:ps -ef

父进程与子进程之间的关联:

其实我们通过管道指令查询到sshd不难发现,进程1155的父进程是1也就是系统进程;

父进程:系统进程(1号进程)

|

子进程:sshd(1155号进程)

|

子进程:menglao[priv](3022号进程)

|

子进程:menglao@pts/0(3213号进程):xshell进程

终止进程:kill

当某个进程执行到一半需要停止,或者消耗太多资源需要手动停止,使用kill指令来完成(杀后台);

kill 参数 进程号 ;

killall 进程名称;

kill -9 进程号 :代表强制关闭此进程,因为像Windows一样哪怕在任务管理器中依然有部分进程无法关闭,那就要使用强制关闭了。

实例:

1、当我使用orange和menglao两个用户同时登陆时,我通过ps -ef | grep orange可以筛选到因为orange登陆而产生的所有进程,而我想强制让orange退出登陆,我就可以把orange下的所有进程清掉,或者清掉orange的父进程;

我通过使用root超级用户,把关于orange的两个进程都kill掉,这时原本已经登录了的orange前台会显示,已被杀死;

2、杀死多个进程,可以看到我在VMware虚拟机开启了多个文档编辑器(gedit),相对应的我去ps -ef查找,找到了对应的PID,

在执行了killall gedit之后可以看到在VMware虚拟机界面瞬间文档编辑器全部消失了;

3、杀掉终端

在VMware中开启两个终端,然后需要杀掉其中一个,正常来说只需要kill PID(终端bash),但是因为系统的保护机制,两个终端都在打开都在使用,系统出于保护不会执行杀掉其中一个终端的指令,这时就需要用到kill -9 PID。

单纯杀6500是不会有反应的,所以需要使用kill -9 强制杀死;


查看进程树:pstree

pstree可以更加直观的查看用户进程;

pstree -p : 显示进程的PID

pstree -u : 显示进程的所属用户

当然也可以同时使用,使用pstree -up 然后通过管道指令筛选出用户menglao的相关进程;;


服务管理

服务(service)本质其实就是进程,但是运行在后台的通常都会监听某个端口,等待其他程序请求,比如mysqld(数据库)、sshd(远程登录)、防火墙等,所以也把这些叫守护进程。

D-daemon 守护进程

这里就会涉及一个问题我们常常说的像ssh这种,但其实在linux终端中输入的却是sshd,这个多出来的d是什么,其实这个d是daemon的缩写,它是基于linux中服务类程序命名规则而来,像常见的ssh和sshd的区别就是,ssh是客户端我们在linux前台使用ssh指令远程登录其他linux主机;而sshd就是ssh-daemon,是ssh的守护进程,负责监听ssh,只要一旦受到ssh指令马上处理需求。

拿ssh和sshd来详细说明:

ssh:是我们主动远程登录访问其他linux主机的程序,那么能有远程登录别人的时候,那肯定也有别人需要远程登录访问我们linux系统的时候;

sshd :sshd就是负责被动监听,什么时候人家需要远程登录访问我们linux系统了,然后去验证对方身份和权限,所以是守护进程。

ssh 是主动访问别人的客户端,sshd 是被动接收别人访问的服务端守护进程,两者分工明确、程序独立。这是 Linux 远程登录的核心工作模式,也是网络服务中 “客户端 – 服务端” 架构的典型案例。

所以关于linux中或者说网络中,客户端和服务端的概念一定要弄清楚,其实两者最大的区别是在于主动和被动的区别。

service管理指令(ubuntu 18后更加推荐使用systemctl)

(其实这里不用涉及太深,因为课程是以centOS7来做示范的,但其实后面很多更新的系统都是已经使用systemctl来执行守护进程的了)

service 服务名 [start|stop|restart|reload|status]

service指令管理在/etc/init.d中查看,可以看到下图截图,ssh只是众多服务里面的一个。


*重点:systemctl管理指令(Ubuntu20.04可用)

在Ubuntu20.04及往后的版本中,更加建议使用systemctl这个指令,而且教程中更多是以centOS7作为教学蓝本,像centOS7中网络服务network在Ubuntu20.04中却称为NetworkManger,所以其实同样是linux系统在很多指令层面不同的版本还是有很多的不同的。

systemctl [start|stop|restart|status] 服务名 :设置对应服务名的开启/停止/重启/检查状态等的指令,如下图,但其实这里的start和stop只是临时的手动设置,如果需要要永久的自启动开启或者关闭还是需要用enabled和disabled指令;

通常systemctl所管理的服务放置在/usr/lib/systemd/system中,如下图;

systemctl可以设置各个服务的自启动状态(像Windows中的开机自启项):

systemctl list-unit-flies | grep 服务名 :用于查看该服务的自启动状态;

enabled:自启动开启;        disabled:自启动关闭;        Static:自启动固定不可配置值;

systemctl enabled 服务名 :设置该服务开机自启动开启;

systemctl disabled 服务名 : 设置该服务开机自启动关闭;

systemctl is-enabled 服务名 :查询该服务开机自启动是否开启;


服务运行级别

之前提过,linux系统有相对应的运行级别(但是常用的只有3和5):


setup:查看系统服务(仅在centOS中能用)

可以通过setup来查看系统服务,但是在Ubuntu系统中没有直接等效的指令,更多是被systemctl和netplan、ufw这些分开指令所替代。


chkconfig管理指令(是使用在centOS中,Ubuntu中无法使用。)

通过chkconfig指令设置各个系统运行级别时,服务自启动的开启和关闭;

chkconfig管理的服务也是放在/etc/init.d

其实chkconfig是对应centOS系统(linux系统偏服务器系统使用yum软件管理包的)的,在Ubuntu(linux系统偏开发者桌面级使用apt软件管理包的)有同样的管理命令就是上面提到过的,systemctl 指令。

其中chkconfig –list等效于systemctl list-unit-files。


*重点:ufw指令(是Ubuntu中对应centOS的firewall指令)

ufw指令就是Uncomplicated Firewall缩写,我们日常可以通过:

sudo ufw status :查看当前防火墙的状态;

sudo ufw enabled :打开防火墙;

sudo ufw disabled :关闭防火墙;

sudo ufw allow 22/tcp : 打开防火墙同时允许访问端口22(tcp是常用的网络协议);

sudo ufw deny 22/tcp : 打开防火墙同时拒绝端口22访问(tcp是常用的网络协议);

sudo ufw reset :重置防火墙规则;


动态进程管理

top指令

top指令和ps指令一样都是观察系统中后台进程管理,两者最大的区别是:

ps:静态,它是进程管理的静态快照,只抓取指令被执行一刻的进程列表与属性;

top:动态,它是对进程动态实时监控,会持续刷新进程状态和系统 资源的占用情况,默认每三秒更新一次。

top  参数 :组成最基础的top指令;

-d        秒数,默认三秒更新一次;

-i        忽略所有待机或者僵死的进程;

-p        指定监控某个PID进程;

可以看到上面两个截图,哪怕没有任何指令操作,也能定时刷新。

之前进程状态,这里可以很清晰看得到,

total总计;

running运行中;

sleeping休眠中;

stopped停止;

zombie僵死进程。

当然top还可以按照P(cpu使用率排序)、M(内存使用率排序)、N(PID名称排序)来查看进程。

网络状态监控

通常我们可以使用netstat来查看系统网络情况。

netstat

netstat -an : 按照一定顺序排列输出;

netstat -p :显示那个进程在调用;

ping

ping指令属于网络检测工具,用于检测远程主机访问是否正常

ping 对方ip地址 : 常用的ping指令;

赞(0)
未经允许不得转载:171主机测评 » Linux学习日志-20260114-进程管理
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址