NO.7 Linux 系统编程
二、进程和线程
-
进程的 STAT(状态)
-
常见的进程状态及其含义: R (Running):进程正在运行或在运行队列中等待执行。 S (Sleeping):进程正在睡眠状态,等待某个事件的发生。例如,等待 I/O 完成或等待其他进程释放资源。 D (Disk sleep):进程正在无法中断的 I/O 操作中,例如等待从磁盘读取数据。 T (Stopped):进程已停止执行并等待继续或终止信号。 Z (Zombie):进程已经终止,但其父进程尚未对其进行清理,因此进程仍然在进程列表中显示为僵尸进程。 X (Dead):进程已经死亡,但仍然在进程列表中显示。这种状态通常是由于进程的父进程没有正常处理终止状态导致的。 W (Paging):内核在等待磁盘页面交换的完成。 L (CPU 被锁定):进程锁定了内存中的页,以防止其交换到磁盘。 (Foreground):进程正在前台运行。
-
man手册
-
man手册分为以下几个章节: 1 User Commands(用户命令):包含了日常使用的命令,如 ls、cp、rm 等。 2 System Calls(系统调用):关于Linux操作系统提供的系统调用接口的手册,用于编写系统级应用程序。 3 Library Functions(库函数):关于C标准库和其他库函数的手册,用于编写应用程序。 4 Special Files(特殊文件):关于设备文件、设备驱动程序和特殊文件的手册。 5 File Formats(文件格式):关于文件格式、文件头和文件标识等信息的手册。 6 Games(游戏):关于在Linux下的游戏的手册。 7 Miscellaneous(杂项):涵盖其他各种信息,如宏、配置文件格式等。 8 System Administration tools and Daemons(系统管理工具和守护进程):关于系统管理工具和守护进程的手册。 9 Kernel routines(内核函数):关于内核的手册,主要包含内核开发相关的函数和接口。 10 Procedures(程序):涉及系统管理员操作和管理的手册。 11 System Library Functions(系统库函数):特殊的库函数,主要用于Linux系统的底层操作。
-
常用系统信号( kill -l )
-
1 SIGHUP:挂起信号,通常用于指示终端连接断开。 2 SIGINT:中断信号,通常由 Ctrl+C 键触发,用于请求中断程序执行。 3 SIGQUIT:退出信号,通常由 Ctrl+\ 键触发,用于请求程序终止。 4 SIGILL:非法指令信号,指示进程执行了非法或未定义的指令。 5 SIGTRAP:跟踪信号,用于调试目的,例如在指令执行前后设置断点。 6 SIGABRT:异常终止信号,用于请求程序自身异常终止,通常由 abort() 函数触发。 7 SIGBUS:总线错误信号,指示进程访问内存中不可访问的地址。 8 SIGFPE:浮点异常信号,指示进程执行了非法的浮点操作,如除以零。 9 SIGKILL:强制终止信号,用于立即终止进程的执行,无法被捕获、处理或忽略。 10 SIGUSR1:用户自定义信号1,可以由程序自定义使用。 11 SIGSEGV:段错误信号,指示进程访问了内存中不可访问的段。 12 SIGUSR2:用户自定义信号2,可以由程序自定义使用。 13 SIGPIPE:管道破裂信号,指示进程向已关闭的管道写入数据。 14 SIGALRM:闹钟信号,通常用于定时器功能。 15 SIGTERM:终止信号,用于请求程序正常终止。 16 SIGSTKFLT:协处理器堆栈异常信号。 17 SIGCHLD:子进程状态变化信号。 18 SIGCONT:继续执行信号,用于恢复被停止的进程的执行。 19 SIGSTOP:停止信号,用于暂停进程的执行。 20 SIGTSTP:终端挂起信号,通常由 Ctrl+Z 键触发,用于请求终端的暂停。 21 SIGTTIN:后台进程读终端输入信号。 22 SIGTTOU:后台进程写终端输出信号。 23 SIGURG:紧急状态信号,通常用于表示带外数据到达。 24 SIGXCPU:CPU时间限制超时信号。 25 SIGXFSZ:文件大小限制超过阈值信号。 26 SIGVTALRM:虚拟定时器信号,类似于 SIGALRM。 27 SIGPROF:进程定时器信号。 28 SIGWINCH:窗口大小改变信号。 29 SIGIO:I/O 可用信号。 30 SIGPWR:电源故障信号。 31 SIGSYS:系统调用中断信号。
一、命令备忘
-
实时查看文件内容
-
实时显示日志 : tail -f test.log
-
软连接 + 硬链接
-
创建软链接: ln -s 文件名 快捷方式的名字 注意事项: ln创建软连接要用绝对路径
创建硬链接: ln 文件名 硬链接的名字 注意事项: 硬链接不能建在目录上 硬连接对绝对路径没有要求 硬连接的本质是不同的文件名所在的inode节点是相同的 -
修改文件所有者和所属组
-
用法: chown 文件所有者:文件所属组 文件名
sudo chown mytest:mytest file.txt -
find + grep 查询命令
-
按文件名查询: find 路径 -name "文件名"
按文件类型查询: find 路径 -type 类型 普通文件类型用f表示而不是 -
按文件大小查询: find 路径 -size 范围 范围: 大于:+表示 -- +100k 小于:-表示 -- -100k 等于: 不需要添加符号 -- 100k 大小: M 必须大写(10M) k 必须小写(20k) c 表示字节数
按深度查询: -maxdepth n(层数) 搜索n层以下的目录, 搜索的层数不超过n层 -mindepth n(层数) 搜搜n层以上的目录,搜索的层数不能小于n层 -
grep 查找:
grep -r(有目录) “查找的内容” 搜索的路径 -r参数, 若是目录, 则可以递归搜索 -n参数可以显示该查找内容所在的行号 -i参数可以忽略大小写进行查找 -v参数不显示含有某字符串
搜索当前目录下包含hello world字符串的文件: grep -r -n "hello world" ./ ------显示行号 grep -r -i -n "HELLO world" ./ -------忽略大小小查找
find和grep命令结合使用: 先使用find命令查找文件, 然后使用grep命令查找哪些文件包含某个字符串 find . -name "*.c" | xargs grep -n "main" -
软件安装和卸载
-
在线安装: 软件安装:sudo apt-get install 软件名 软件卸载:sudo apt-get remove 软件名 更新软件列表:sudo apt-get update 清理安装包:sudo apt-get clean 清理的是缓存路径:/var/cache/apt/archives 软件包安装: 在Ubuntu系统下必须有deb格式的安装包 软件安装 sudo dpkg -i xxx.deb 软件卸载 sudo dpkg -r 软件名
-
vim 命令
-
0 光标移到到行首 $ 光标移到到行尾 d0 删除光标前本行所有内容,不包含光标所在字符 D[d$] 删除光标后本行所有内容,包含光标所在字符 查找命令: / /xxxx, 从光标所在的位置开始搜索, 按n向下搜索, 按N向上搜索 ? ?xxxx, 从光标所在的位置开始搜索, 按n向上搜索, 按N向下搜索 # 将光标移动到待搜索的字符串上, 然后按n向上搜索,但N向下搜索 shift+k 在待搜索的字符串上按shift+k或者K, 可以查看相关的帮助文档
替换操作: :s/old/new/ 光标所在行的第一个old替换为new :s/old/new/g 光标所在行的所有old替换为new :m, ns/old/new/g 将第m行至第n行之间的old全部替换成new :%s/old/new/g 当前文件的所有old替换为new :1,$s/old/new/g 当前文件的所有old替换为new :%s/old/new/gc 同上,但是每次替换需要用户确认 快速翻屏: ctrl + u 向下翻半屏(up)--光标向上移动 ctrl + d 向上翻半屏(down)--光标向下移动 ctrl + f 向上翻一屏(front) ctrl + b 向后翻一屏(back) 分屏操作: sp 当前文件水平分屏 vsp 当前文件垂直分屏 sp 文件名 当前文件和另一个文件水平分屏 vsp 文件名 当前文件和另一个文件垂直分屏 ctrl-w-w 在多个窗口切换光标 wall/wqall/xall/qall/qall! 保存/保存退出/保存退出/退出/强制退出分屏窗口
配置文件:
~/.vimrc, 修改用户级别的配置文件只会影响当前用户, 不会影响其他的用户
/etc/vim/vimrc, 修改了系统级别的配置文件将影响系统下的所有用户. -
gcc 备忘参数
-
gcc 备忘参数: -I 指定头文件所在的路径 -L 指定库文件所在的路径 -l 指定库的名字 -On n=0∼3 编译优化,n越大优化得越多