什么是进程
从Windows说起:
可执行文件 -D:\Program Files (x86)\Tencent\QQ\Bin\QQ.exe
程序和进程的概念
程序(软件)用代码决定程序的行为,存在存储介质里面,比如硬盘。静态的,一直保存在磁盘中
程序运行起来,就是操作系统把存储介质上的可执行文件,加载到内存里面运行,这个运行的程序叫做进程。动态的 、暂时的
ps命令查看进程
不带任何参数:同一个用户同一个终端的进程
-ef参数:e 表示所有,f 表示full-format,尤其是PPID和command内容
后台运行进程
前台进程和后台进程
shell里正在执行的和用户进行交互的进程叫前台进程。举例ps,ls分别为前台进程,时间短。
有的命令执行时间长,比如备份程序,可以在后台执行:加&
示例:vi abc.txt &
后台运行意味着不从标准输入读入字符
后台运行的进程我们叫后台进程,后者后台任务。
进程前、后台切换
列出后台进程jobs
示例:执行 vim abc.txt &
fg <num> 将后台进程调到前台
bg <num>可让进程在后台执行
ctrl+z (暂停)可挂起进程,注意jobs显示的状态是stopped
ctrl+c (终止,取消)
终止进程
进程的两种终止方式
自行终止
- 任务执行完成,比如ps
- 用户让其退出,比如shell exit
- 异常退出,比如 程序里有除以0的代码
用户手动杀死进程
- kill PID SIGTERM 劝退
- kill -9 PID SIGKILL 强制
- ctrl+c SIGINT
- 只能是owner和root才能杀死进程
标准输入、标准输出、标准错误
stdin、stdout、stderr:
用户通过终端与shell 交互shell缺省打开3个文件句柄 进程从stdin读取用户输入 从stdout、stderr输出信息指向同一个设备文件-终端
重定向-标准输出
有的时候,不想输出到终端上(命令结果要处理)
使用shell的一个功能:重定向
ps -ef > out 也可以ps -ef | > out
0 - stdin; | - stdout; 2 - stderr
追加而不是覆盖 >>
重定向-标准错误
重定向-标准输入
有时需要从文件里面读取内容,而不是终端设备
演示:实例:rm -i abc.txt <stdin
管道
将前面的ps -ef命令的stdout(本来是输出到终端设备的)重定向到一个临时管道设备里面,
同时将后一个命令grep || 82的stdin重定向到这个临时的管道设备
管道示意图
管道的一些用法
让stdout和stderr同时重定向到管道: python both.py 2>&1 |grep err
连续使用管道: ps -ef |grep python|grep -v grep
经常需要将一个命令的输出的内容,给另一个命令作为输入的内容进行处理
ps -ef 和grep python
可以分为两步
第一步:ps -ef>tmp.out
第二步:grep python tmp.out
使用管道更方便 ps -ef|grep python