Guide_to_Uinix

  1. Unix FileSystem
  2. Process and Job Control

原文链接: 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

  • &后台运行一个job
  • ctrl+z将当前job挂起
  • bg将一个挂起的job放到后台运行,比如一个job被ctrl+z挂起后,可以用bg命令让它继续运行
  • fg将一个job放到前台运行
  • jobs查看当前job
  • kill终止一个job
  • suspend挂起当前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命令用于终止进程与job
kill -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

×

喜欢就点赞,疼爱就打赏