Linux学习—进程、服务、容器操作

67 阅读3分钟

进程(Process)、服务(Service)、容器(container)关系

服务一般可以持续在后台运行,可以设置开机自启,可以认为是常驻系统的特殊进程,有启动脚本。 容器是可以简单认为是运行在一个被隔离沙盒中的进程和服务,只不过通过namespace、cgroup等机制隔离了资源和环境,但是容器中的进程在宿主机上就是普通进程(这是和虚拟机的最大区别)。

进程操作指令

ps #查看当前用户进程。
ps -ef #查看所有进程 按照SysV风格列出当前服务器上的所有进程 -A -e效果相同表示显示所有进程,-f表示显示UID PPIP C STIME栏位
ps aux #查看所有进程 按照BSD风格列出当前服务器上的所有进程 a u x 以用户为主显示所有程序,不依终端机来区分
pgrep A #查看名字为A进程的PID,可以通过这个方式判断A是否在运行。 top #动态实时查看进程,不过还是用Htop更方便一些。
kill 1234 #kill掉PID为1234的进程, -9 强制终止。

服务操作指令

systemctl list-units --type=service --state=running  #查看系统正在运行的服务  
systemctl list-units --type=service #查看所有服务状态(包括未运行的)
systemctl status ssh.service #查看服务状态    
systemctl --type=service #查看所有服务
systemctl start  #启动服务
systemctl stop   #停止服务 
systemctl enable #设置开机自启
journalctl -u ssh.eservice --since "1 hour ago" #查看服务日志  

容器操作指令

docker ps #查看当前运行的所有容器
docker ps -a #查看所有容器

会显示容器的container id、image(使用镜像名字和版本,PS:容器是由镜像创建的,镜像相当于一个应用程序安装包,它躺在硬盘上,而容器是这个应用程序在内存中运行中的一个实例)、command、status、names。

docker ps --filter "ancestor=A" #查看使用镜像A创建的容器
docker images #查看所有镜像,相当于查看软件包里有什么软件。

会显示 REPOSITORY(镜像名)、TAG(版本)、IMAGE ID、CREATED(创建日期)、SIZE(镜像大小)

docker run -d --name MyContainer A:v1.0

用镜像A启动一个容器,容器名命名为MyContainer。

docker stop a_container #退出容器
docker kill a_container #强制退出一个容器
docker rm a_container #删除一个容器
docker rm -f a_cotainer #先强制停止再删除

如何区分一个进程是在宿主机中跑的还是在某个容器中跑的

ps -eo pid,cmd,cgroup | grep docker

通过列举出的cgroup列判断,如果一个进程属于某个容器,那么cgroup会显示 /system.slice/docker-container-id.scope

docker top <容器名>

这个命名会显示容器中运行的进程信息

如果你知道这个进程的PID,可以查看这个这个进程PID的cgroup信息来判断。

cat /proc/1234/cgroup #输出内容含有docker/容器ID前缀

使用htop添加Cgroup或者Cantainer ID列,F2 —— Columns —— 添加

htop