一、进程和线程

1、process 进程
进程就是linux系统上的一个任务资源单位
2、thread 线程
线程就是完成某一项进程的具体实施者
进程是存在存储空间的,在进程的空间内,线程共享这个资源
某一块进程内的内存数据,只能给一个线程使用;别的要用,只能等待上一个结束
线程在使用进程的内存数据时,会针对该内存数据进行锁操作(进线程的互斥锁,mutex ),防止多线程使用同一个进程的内存资源

二、进程管理

1、PS
  1. PS 选项 操作对象 #用于报告当前系统的进程状态的命令
  1. [root@ylinux ~]# ps
  2. PID TTY TIME CMD
  3. 1905 pts/0 00:00:00 bash #PID 进程对应的ID号 CMD 当前进程系统命令
  4. 2213 pts/0 00:00:00 ps #TTY 进程所属的控制台号 TIME 当前使用CPU的总时间
  5. [root@ylinux ~]# kill -9 2240 #强制杀死某一个进程
  1. [root@ylinux ~]# ps -ef #显示出linux机器所有详细的进程信息 -e 列出所有的进程 -f 显示详细信息
  2. UID PID PPID C STIME TTY TIME CMD
  3. root 1 0 0 12:56 ? 00:00:05 /usr/lib/
  4. root 2 0 0 12:56 ? 00:00:00 [kthreadd
  5. UID 谁执行这个命令 PID 进程号 PPID 父进程号 C CPU资源百分比
  6. STIME 进程开始执行的时间 TIME 该进程的CPU时长
  1. PS命令的两种系统形式
  2. PS ef #没有-, e 列出进程信息时,添加每个进程所在的环境变量 f 显示进程之间的关系
  3. ps -ef
  1. ps aux # a 当前终端下所有的进程,包括其他用户的进程信息 u 以用户为主的风格显示 x 显示所有的进程
  2. [root@ylinux ~]# ps aux
  3. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  4. root 1 0.2 0.3 193936 6960 ? Ss 12:56 0:05 /usr/lib/systemd/systemd --switched-root --system
  5. root 2 0.0 0.0 0 0 ? S 12:56 0:00 [kthreadd]
  6. VSZ 该进程使用的swap内存单位 RSS 表示进程所占用的内存量
  7. STAT 表示进程此时的状态 S 表示终端睡眠中,可以被唤醒 s 表示这个进行有子进程 R 正在运行 D 该进程不能终端睡眠 T 该进程已经停止了 Z 表示该进程为僵尸进程
  8. + 前台进程 N 低优先级进程 < 高优先级进程 L 该进程已经被锁定
  9. ps -u root #只显示root用户的进行
  10. ps -eo pid #自定义显示的参数格式
  11. ps -eH #树形显示进程
  12. [root@ylinux ~]# pstree #树形显示进程

2、pgrep
  1. [root@ylinux ~]# pgrep -l ssh #查询某一个进程的进程号,判断该进程是否存活
  2. 1206 sshd

3、kill
  1. kill -l 列出所有的终止心信号,常用如下:
  2. 1 SIGHP 挂起进程 2 SIGINT 中断信号,其实就是Ctrl+c
  3. 3 SIGQUIT 退出信号 ctrl +\ 9 SIGKELL 强制中断信号,立刻杀死某些进程
  4. 15 SIGTERM 默认使用,终止进程 20 SIGTSTP 暂停进程,可以恢复的哦 Ctrl+z
  5. 0 特殊信号,用于判断进程是否存在
  1. kill PID #终止进程,或者-9
  2. kill -0 $PID #执行结果为0 表示进程存在; 结果为1,不存在
  3. echo $? #shell的特殊变量,取出上一次命令的执行结果,为0表示命令正确,不为0都是错误状态码

4、killall
  1. kill 命令只能杀死一个pid进程,通过killall可以直接通过名字杀死进程(有子进程可能要多杀几次)
  2. killall vim #杀死所有的vim的进程

5、pkill
  1. pkill也可以通过名字杀死进程,包括父进程和子进程
  2. pkill ping #杀死所有的ping进程
  3. pkill -9 -t pst/2 #强制杀死某个终端的所有进程,其实就是踢下线

三、nohup

nohup你希望你的程序后台运行,输出结果不打印出来;以忽略挂起信号的形式在后台运行
无论是否将nohup命令的输出重定向到终端,nohup命令执行的输出结果都会写入到当前目录的nohup.out文件中;
如果当前目录的nohup.out文件禁止写入,那么nohup的命令结果会写入到$home/nohup.out文件中

  1. [root@ylinux ~]# nohup ping www.baidu.com #虽然输出重定向到nohup中了,但是前台卡住了;关闭终端进程还在运行
  2. nohup: ignoring input and appending output to nohup.out
  3. ^C[root@ylinux ~]#
  4. 使用nohup之后不会直接关闭窗口,而是希望接着使用命令行
  5. [root@ylinux ~]# nohup ping e.huawei.com & #结尾加上&就行
  6. [1] 2273

四、BG

  1. ping www.baidu.com 然后ctrl+z暂停该进程
  2. 通过jobs 查看后台任务
  3. 如果想要前台运行fg +任务号
  1. 如果不想让日志输出到前台,可以输出到文件或者黑洞文件中
  2. 此处有三种方式,可以忽略标准输出(1)和标准错误输出(2
  3. nohup ping baidu.com > /dev/null 2>&1 #将第一种程序执行正确/错误的输出结果,都写入到黑洞文件中
  4. nohup ping baidu.com 1>dev/null 2>/dev/null #同上
  5. nohup ping baidu.com &>/dev/null #同上