原文链接: Guide to Unix
Unix FileSystem
Unix文件分为三种类型:普通文件,目录文件,特殊文件
- 普通文件:存储数据
- 目录文件:存储文件名和指向文件的指针
- 特殊文件:设备文件,包括字符设备和块设备
设备文件
在dev目录下,包括字符设备和块设备
- tty: 终端设备,键入tty命令可以查看当前终端
cp /etc/passwd /dev/tty1
会将passwd文件输出到tty1终端 - pts: 伪终端设备,用于远程登录
- null与zero: 向二者写入数据会被丢弃,读取会返回EOF与0,
dd if=/dev/zero of=temp bs=100 count=1
会建立一块清零的文件 - random与urandom: 产生随机数,random会等待系统产生随机数,urandom会直接产生随机数
命名管道mkfifo
命令可以创建命名管道,命名管道是一种特殊的文件,用于进程间通信,mkfifo pipe
会创建一个名为pipe的命名管道,echo "hello" > pipe
会将hello写入pipe管道,cat pipe
会读取pipe管道的数据,用于IPC
Process and Job Control
unix中所有进程都有一个父进程,最主要的管理进程的系统调用就是fork,exec,wait
- fork: 创建一个新的进程,新进程是调用进程的副本,新进程的PID是唯一的,但是其他的属性都是一样的
- exec: 用于执行一个新的程序,exec函数会将当前进程的内存空间替换为新程序的内存空间,但是PID不会改变
- wait: 用于等待子进程的结束,如果子进程已经结束,wait会立即返回,否则会阻塞
unix启动过程中会手动构建一个idle进程,然后fork出一个init进程,init进程是所有进程的祖先进程
如果一个子进程在运行时父进程被终止,子进程就成了孤儿进程,init进程会接管孤儿进程,保证孤儿进程不会成为僵尸进程
如果一个父进程在子进程结束后没有调用wait函数,子进程就会成为僵尸进程,僵尸进程会占用系统资源,僵尸进程不占用内存,但是会占用进程表项,所以应该避免产生僵尸进程
*job与process的区别
job是一个或多个进程的集合,一个job可以包含多个进程,一个进程只能属于一个job,job是属于shell的管理单元,一个shell可以包含多个job
who | cut -c 1-8 | sort | uniq -c
这个命令包含了四个进程,但是只有一个job
Job Control
&
后台运行一个jobctrl+z
将当前job挂起bg
将一个挂起的job放到后台运行,比如一个job被ctrl+z挂起后,可以用bg命令让它继续运行fg
将一个job放到前台运行jobs
查看当前jobkill
终止一个jobsuspend
挂起当前shell,可以用于切换用户
Process Control
ps
查看当前进程
由于历史原因,ps同时支持BSD与AT&T两种风格的参数,BSD风格的参数是ps aux
,AT&T风格的参数是ps -ef
使用ps命令时主要从三个方面考虑:要展示哪些进程,展示进程的哪些内容,如何展示
展示哪些进程:
AT&T风格: -e(evrything) 显示所有进程包括守护进程,-a显示与当前usrid和当前终端有关的进程 -p pid显示指定进程 -u user显示指定用户的进程
BSD风格: a 显示与当前usrid和终端有关的进程,ax显示所有进程包括守护进程,p pid显示指定进程,U user显示指定用户的进程
展示进程的哪些内容:
AT&T风格: -f显示全格式,-l显示长格式
BSD风格: l,u,v
常用组合:
AT&T风格: ps -ef
显示所有进程,ps -ef | grep ssh
显示所有包含ssh的进程
BSD风格: ps aux
显示所有进程,ps aux | grep ssh
显示所有包含ssh的进程
BSD的States字段(AT&T风格的S字段):
- R: running,正在运行或在运行队列中等待
- S: sleeping,休眠状态,等待某个条件的发生
- I: idle,空闲状态
- Z: zombie,僵尸进程
- T: stopped,停止状态,被挂起或者正被追踪
ps查看的是某一时刻的静态内容,top命令可以查看动态的进程信息top [-d delay] [-n iterations] [-p pid[,pid]...]
可以设置top的刷新间隔和刷新次数,可以在系统变慢时用top查看哪个进程占用了过多的资源
pstree
命令可以查看进程的树状结构,理清进程之间的关系
-p 参数可以显示进程的PID
-n 按进程的PID排序而非进程名
-a 显示进程的命令行参数
-u 显示进程的所有者
kill
命令用于终止进程与jobkill -l
列出所有信号,kill -9 pid
强制终止进程,因为9号信号是SIGKILL,是一个不可捕获的信号kill -s signal pid
向进程发送信号,kill -s SIGKILL pid
等价于kill -9 pid
或者kill -KILL pid
nice
调整进程和job的优先级nice [-n increment] command
可以调整command的优先级,nicenumber越大优先级越低,只有superuser可以使用负值,普通用户只能使用0-19的值renice
可以调整已经运行的进程的优先级renice priority -p pid
可以调整指定进程的优先级
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2128099421@qq.com