进程管理
进程概念
进程管理
这里我们要了解以下几个概念:
进程基本概念 什么是程序 什么是进程 什么是线程 进程线程程序三者关系
首先我们要知道一点:程序不消耗资源 进程需要消耗资源
一:相关定义
程序:
二进制文件,静态 /usr/sbin/httpd,/usr/sbin/sshd
进程:
是程序运行的过程, 动态,有生命周期的,可以产生和消亡的(进程是已启动的可执行程序的运行实例,实例即运行可执行程序)。
线程:
线程是进程之内独立执行的一个单元。对于操作系统而言,其调度单元是线程;一个进程至少包括一个线程,通常将该线程称为主线程;一个进程从主线程的执行开始,进而创建一个或多个附加线程,就是所谓基于多线程的多任务。
父进程:
程序运行时产生的第一个进程,任何进程都可以作为父进程创建子进程。
子进程:
由父进程使用fork()函数完全复制自己的地址空间创建出来的新的进程就是子进程,子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码.
二:进程的状态
在多任务处理操作系统中,每个CPU(或每个核心)在一个时间点上只能处理一个进程。在进程运行时,它对CPU时间和资源分配的要求会不断变化(进程不会持续的占用cpu,而是根据自己的需求来决定是否需要使用cpu时间),所以进程在运行的时候会有不同的状态,它随着环境要求而改变,具体的状态可以参考下图来看:
PID 进程ID
PPID 父进程ID
进程的状态标识:
R Running or runnable (on run queue) 正在被cpu处理的进程
S Interruptible sleep (waiting for an event to complete) 暂停状态
T Stopped, either by a job control signal or because it is being traced. 停止运行
Z Defunct ("zombie") process, terminated but not reaped by its parent. 僵尸进程
‘+’ Is in the foreground process group运行在前台的进程组
< high-priority (not nice to other users) 高优先级的进程
s is a session leader 父进程
静态查看进程
使用命令ps aux
a 只能查看所有终端进程
u 显示进程拥有者
x 显示系统内所有进程
在查出来的内容里面的字段分别是:
USER: 运行进程的用户
PID: 进程ID
%CPU: CPU占用率
%MEM: 内存占用率
VSZ: 占用虚拟内存
RSS: 占用实际内存 驻留内存
TTY: 进程运行的终端
STAT: 进程状态 我们可以使用man手册进行了解,命令:man ps
(/STATE)
R 运行
S 可中断睡眠 Sleep
T 停止的进程
Z 僵尸进程
X 死掉的进程
【了解 】
Ss s进程的领导者,父进程
S< <优先级较高的进程
SN N优先级较低的进程
R+ +表示是前台的进程组
Sl 以线程的方式运行
START: 进程的启动时间
TIME: 进程占用CPU的总时间
COMMAND: 进程文件,进程名
除此之外,可以根据相关条件进行排序查看
命令语法格式
ps axo 字段 –sort 排序依据 |head 后面的管道显示的内容可以添加也可以不添加
示例:
[root@ localhost~]# ps aux --sort %cpu 从小到大
[root@ localhost~]# ps aux --sort -%cpu 从大到小
[root@ localhost~]# ps aux --sort rss
[root@ localhost~]# ps aux --sort -rss
[root@localhost~]# yum -y install httpd (apache)
[root@localhost~]# systemctl start httpd
[root@localhost~]# ps auxf |grep httpd
案例:
1.要查看进程相关的信息,只显示pid、command和%mem字段,并根据%mem字段排序
ps axo pid,command,%mem –sort -%mem
ps aux
ps axo
ps -elf
通过判断进程是否存在,判定程序是否运行;
pid
安装htop
[root@localhost ~]# yum -y install epel-release && yum -y install htop
swap:交换分区
内存条:真实的物理内存
把磁盘空间拿出2G给swap 虚拟内存 交换分区
防止OOM;内存溢出
进程控制
kill家族
语法格式:
kill +信号 pid
[root@localhost ~]# kill -l //列出所有支持的信号 编号 信号名
-1 HUP 重新加载进程或者重新加载配置文件
-9 KILL 强制杀死
-15 TERM 正常杀死(这个信号可以默认不写)
-18 CONT 激活进程
-19 STOP 挂起进程
[root@localhost ~]# kill -HUP pid
[root@localhost ~]# kill -STOP pid
案例1: 给sshd进程发送1信号
(修改完配置文件必须要重新加载配置文件或者是重新启动服务,目的是为了让修改后的配置文件生效)
(重新加载配置文件pid保持不变,重启服务,pid会发生改变)
(pid的作用是用来唯一标识一个进程,如果说这个进程关闭又重启,我们系统不会保留这个原有的pid,会生成一个新的pid给我们的服务使用)
[root@localhost-server-11 /]# ps aux | grep httpd | grep -v grep (-v取反)
root 758 0.0 0.0 433564 15212 ? Ss 01:42 0:02 /usr/sbin/httpd -DFOREGROUND
apache 879 0.0 0.0 433564 7120 ? S 08:22 0:00 /usr/sbin/httpd -DFOREGROUND
apache 880 0.0 0.0 433564 7120 ? S 08:22 0:00 /usr/sbin/httpd -DFOREGROUND
apache 881 0.0 0.0 433564 7120 ? S 08:22 0:00 /usr/sbin/httpd -DFOREGROUND
apache 882 0.0 0.0 433564 7120 ? S 08:22 0:00 /usr/sbin/httpd -DFOREGROUND
apache 883 0.0 0.0 433564 7120 ? S 08:22 0:00 /usr/sbin/httpd -DFOREGROUND
[root@localhost-server-11 /]# kill -1 758
[root@localhost-server-11 /]# ps aux | grep httpd | grep -v grep
root 758 0.0 0.0 433564 15220 ? Ss 01:42 0:02 /usr/sbin/httpd -DFOREGROUND
apache 901 0.0 0.0 433700 7132 ? S 08:24 0:00 /usr/sbin/httpd -DFOREGROUND
apache 902 0.0 0.0 433700 7132 ? S 08:24 0:00 /usr/sbin/httpd -DFOREGROUND
apache 903 0.0 0.0 433700 7132 ? S 08:24 0:00 /usr/sbin/httpd -DFOREGROUND
apache 904 0.0 0.0 433700 7132 ? S 08:24 0:00 /usr/sbin/httpd -DFOREGROUND
apache 905 0.0 0.0 433700 7132 ? S 08:24 0:00 /usr/sbin/httpd -DFOREGROUND
[root@localhost-server-11 /]# systemctl restart httpd
[root@localhost-server-11 /]# ps aux | grep httpd | grep -v grep
root 915 4.5 0.0 433588 14524 ? Ss 08:24 0:00 /usr/sbin/httpd -DFOREGROUND
apache 917 0.0 0.0 433588 6476 ? S 08:24 0:00 /usr/sbin/httpd -DFOREGROUND
apache 918 0.0 0.0 433588 6476 ? S 08:24 0:00 /usr/sbin/httpd -DFOREGROUND
apache 919 0.0 0.0 433588 6476 ? S 08:24 0:00 /usr/sbin/httpd -DFOREGROUND
apache 920 0.0 0.0 433588 6476 ? S 08:24 0:00 /usr/sbin/httpd -DFOREGROUND
apache 921 0.0 0.0 433588 6476 ? S 08:24 0:00 /usr/sbin/httpd -DFOREGROUND
[root@localhost-server-11 /]# ps aux | grep sshd
root 73 0.0 0.0 112864 4300 ? Ss Jul02 0:00 /usr/sbin/sshd -D
root 926 0.0 0.0 9088 668 pts/4 S+ 08:25 0:00 grep --color=auto sshd
[root@localhost-server-11 /]# kill -1 73
[root@localhost-server-11 /]# ps aux | grep sshd
root 73 0.0 0.0 112864 4300 ? Ss Jul02 0:00 /usr/sbin/sshd -D
root 928 0.0 0.0 9088 668 pts/4 S+ 08:25 0:00 grep --color=auto sshd
[root@localhost-server-11 /]# systemctl restart sshd
[root@localhost-server-11 /]# ps aux | grep sshd
root 932 1.0 0.0 112864 4300 ? Ss 08:25 0:00 /usr/sbin/sshd -D
root 934 0.0 0.0 9088 668 pts/4 S+ 08:25 0:00 grep --color=auto sshd
案例:给vim进程发送9,15信号
[root@localhost ~]# touch file1 file2
[root@localhost ~]# tty
/dev/pts/1
[root@localhost ~]# vim file1
[root@localhost ~]# tty
/dev/pts/2
[root@localhost ~]# vim file2
[root@localhost ~]# ps aux |grep vim
root 4362 0.0 0.2 11104 2888 pts/1 S+ 23:02 0:00 vim file1
root 4363 0.1 0.2 11068 2948 pts/2 S+ 23:02 0:00 vim file2
[root@localhost ~]# kill 4362
[root@localhost ~]# kill -9 4363
案例:给sshd进程发送18,19信号
[root@localhost ~]# ps aux |grep sshd
root 5571 0.0 0.0 64064 1164 ? Ss 09:35 0:00 /usr/sbin/sshd
[root@localhost ~]# kill -STOP 5571 19
[root@localhost ~]# ps aux |grep sshd
root 5571 0.0 0.0 64064 1164 ? Ts 09:35 0:00 /usr/sbin/sshd
[root@localhost ~]# kill -cont 5571 18
[root@localhost ~]# ps aux |grep sshd
root 5571 0.0 0.0 64064 1164 ? Ss 09:35 0:00 /usr/sbin/sshd
扩展:
[root@localhost ~]# killall 信号 进程名称
杀死与这个进程名称相关的所有进程
[root@localhost ~]# pkill -9 进程名称
[root@localhost ~]# pkill -9 -t 终端 名称
不加-9只杀死在终端上运行的进程,加-9连终端本身一起干掉
[root@localhost ~]# pkill -u 用户名称
备注:
如果没有killall的命令:
[root@localhost-server-11 /]# yum -y install psmisc
发现被入侵之后怎么办?
1、技术不太好,可以考虑先关机,然后找到上游防火墙,只允许自己的IP地址SSH,除此之外全部封禁;如果无法访问上游防火墙,则可以使用服务器本身的防火墙策略,当防火墙规则生效之后kill掉对方。
2、如果支持诸如串行控制台之类的带外连接登陆服务器,可以将network服务停掉,然后添加防火墙规则 。
3、修复之后,你永远不知道对方做过什么,最安全的方法是备份所有数据,重装系统。
扩展命令:
&符号 后台运行
jobs 查看后台运行的进程
网络进程
查看网络进程
系统上每一个服务都有自己默认的端口号
vnc 5900
ssh 22
http 80 (nginx apache)
https 443
mariadb/mysql 3306
php 9000
redis 6379
tomcat (8080 8009 8005)
netstat
netstat -auntpl | grep 22 过滤22号端口
-a 所有的进程
-u udp进程
-n 显示端口号 5900 vnc 21、20 ftp ssh 22 http 80 (apache,nginx) https 443 mysql/mariadb 3306 php 9000 redis 6379 tomcat(8009 8080 8005)
-t tcp进程
-p 显示程序的pid 和 名称
-l listening 监听的进程
ss
ss
推荐使用
查看网络进程
-a 所有的进程
-u udp进程
-n 显示段口号 5900 vnc 21、20 ftp
-t tcp进程
-p 显示程序的pid 和 名称
-l listening 监听的
目前进程的基本操作就这么多,如果有不懂的或者难以理解的,欢迎留言评论或者私信。
Linux权限管理---最全最详细的文件权限设置管理,手把手教你设置文件权限UGO和数字权限,高级权限等等_error1024的博客-CSDN博客