@@ -417,7 +417,7 @@ id会显示用户以及所属群组的实际与有效ID。若两个ID相同,
417417
418418### sudo命令
419419
420- sudo: 控制用户对系统命令的使用权限,root允许的操作。通过sudo可以提高普通用户的操作权限
420+ sudo: 控制用户对系统命令的使用权限,root允许的操作。通过sudo可以提高普通用户的操作权限
421421
422422- -V 显示版本编号
423423- -h 会显示版本编号及指令的使用方式说明
@@ -436,12 +436,14 @@ sudo:控制用户对系统命令的使用权限,root允许的操作。通过sudo
436436
437437### top命令
438438
439- top:用于实时显示 process 的动态。
439+ top:用于实时显示 process 的动态
440440
441441top -c:command属性进行了命令补全
442442
443443top -p 进程号:显示指定pid的进程信息
444444
445+ top -d 秒数:表示进程界面更新时间(每几秒刷新一次)
446+
445447![ ] ( https://gitee.com/seazean/images/raw/master/Linux/top命令.png )
446448
447449** 各进程(任务)的状态监控属性解释说明:**
@@ -1602,6 +1604,143 @@ vim 中提供有一个 被复制文本的缓冲区
16021604
16031605
16041606
1607+ ***
1608+
1609+
1610+
1611+ # ## 链接
1612+
1613+ ` ` ` sh
1614+ ln [-sf] source_filename dist_filename
1615+ ` ` `
1616+
1617+ * -s:默认是实体链接,加 -s 为符号链接
1618+ * -f:如果目标文件存在时,先删除目标文件
1619+
1620+ < img src=" https://gitee.com/seazean/images/raw/master/Linux/文件链接.png" style=" zoom: 80%;" />
1621+
1622+ ** 实体链接** :
1623+
1624+ * 在目录下创建一个条目,记录着文件名与 inode 编号,这个 inode 就是源文件的 inode
1625+ * 删除任意一个条目,文件还是存在,只要引用数量不为 0
1626+ * 不能跨越文件系统、不能对目录进行链接
1627+
1628+ ` ` ` sh
1629+ ln /etc/crontab .
1630+ ll
1631+ 34474855 -r w-r--r--. 2 root root 451 Jun 10 2014 crontab
1632+ 34474855 -r w-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
1633+ ` ` `
1634+
1635+ ** 符号链接** :
1636+
1637+ * 符号链接文件保存着源文件所在的绝对路径,在读取时会定位到源文件上,可以理解为 Windows 的快捷方式
1638+
1639+ * 当源文件被删除了,链接文件就打不开了
1640+
1641+ * 记录的是路径,所以可以为目录建立符号链接
1642+
1643+ ` ` ` sh
1644+ 34474855 -r w-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab
1645+ 53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 -> /etc/crontab
1646+ ` ` `
1647+
1648+
1649+
1650+
1651+
1652+ ***
1653+
1654+
1655+
1656+ # # 进程管理
1657+
1658+ # ## 查看进程
1659+
1660+ ps 指令:查看某个时间点的进程信息
1661+
1662+ top指令:实时显示进程信息
1663+
1664+ pstree:查看进程树
1665+
1666+ ` ` ` sh
1667+ pstree -A # 查看所有进程树
1668+ ` ` `
1669+
1670+
1671+
1672+
1673+
1674+ # ## 进程状态
1675+
1676+ | 状态 | 说明 |
1677+ | ---- | ------------------------------------------------------------ |
1678+ | R | running or runnable (on run queue) 正在执行或者可执行,此时进程位于执行队列中 |
1679+ | D | uninterruptible sleep (usually I/O) 不可中断阻塞,通常为 IO 阻塞 |
1680+ | S | interruptible sleep (waiting for an event to complete) 可中断阻塞,此时进程正在等待某个事件完成 |
1681+ | Z | zombie (terminated but not reaped by its parent) 僵死,进程已经终止但是尚未被其父进程获取信息 |
1682+ | T | stopped (either by a job control signal or because it is being traced) 结束,进程既可以被作业控制信号结束,也可能是正在被追踪 |
1683+
1684+ 孤儿进程:
1685+
1686+ * 一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程
1687+
1688+ * 孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作
1689+ * 孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害
1690+
1691+ 僵尸进程:
1692+
1693+ * 一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait () 或 waitpid () 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait () 或 waitpid (),那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程
1694+ * 僵尸进程通过 ps 命令显示出来的状态为 Z(zombie)
1695+ * 系统所能使用的进程号是有限的,产生大量僵尸进程,会导致系统没有可用的进程号而不能产生新的进程
1696+
1697+ * 要消灭系统中大量的僵尸进程,只需要将其父进程杀死,此时僵尸进程就会变成孤儿进程,从而被 init 进程所收养,这样 init 进程就会释放所有的僵尸进程所占有的资源,从而结束僵尸进程
1698+
1699+
1700+
1701+ ***
1702+
1703+
1704+
1705+ # ## 状态改变
1706+
1707+ # ### SIGCHLD
1708+
1709+ 当一个子进程改变了它的状态时(停止运行,继续运行或者退出),有两件事会发生在父进程中:
1710+
1711+ - 得到 SIGCHLD 信号
1712+ - waitpid () 或者 wait () 调用会返回
1713+
1714+ 子进程发送的 SIGCHLD 信号包含了子进程的信息,比如进程 ID、进程状态、进程使用 CPU 的时间等;在子进程退出时,它的进程描述符不会立即释放,这是为了让父进程得到子进程信息,父进程通过 wait () 和 waitpid () 来获得一个已经退出的子进程的信息
1715+
1716+
1717+
1718+ # ### wait
1719+
1720+ ` ` ` c
1721+ pid_t wait(int * status)
1722+ ` ` `
1723+
1724+ 参数:status 用来保存被收集的子进程退出时的状态,如果不关心子进程** 如何** 销毁,可以设置这个参数为 NULL
1725+
1726+ 父进程调用 wait () 会一直阻塞,直到收到一个子进程退出的 SIGCHLD 信号,wait () 函数就会销毁子进程并返回
1727+
1728+ * 成功,返回被收集的子进程的进程 ID
1729+ * 失败,返回 -1,同时 errno 被置为 ECHILD(如果调用进程没有子进程,调用就会失败)
1730+
1731+
1732+
1733+ # ### waitpid
1734+
1735+ ` ` ` c
1736+ pid_t waitpid(pid_t pid, int * status, int options)
1737+ ` ` `
1738+
1739+ 作用和 wait () 完全相同,只是多了两个可控制的参数 pid 和 options
1740+
1741+ * pid:指示一个子进程的 ID,表示只关心这个子进程退出的 SIGCHLD 信号;如果 pid=-1 时,那么和 wait () 作用相同,都是关注所有子进程退出的 SIGCHLD 信号
1742+ * options:主要有 WNOHANG 和 WUNTRACED 两个,WNOHANG 可以使 waitpid () 调用变成非阻塞的,就是会立即返回,父进程可以继续执行其它任务
1743+
16051744
16061745
16071746
@@ -1687,7 +1826,8 @@ netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
16871826
16881827补充:
16891828
1690- * lsof -i:端口号:查看指定端口号
1829+ * netstat -apn | grep port:查看指定端口号
1830+ * lsof -i:port :查看指定端口号
16911831
16921832
16931833
0 commit comments