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=03 编译优化,n越大优化得越多

     

 

posted @ 2023-10-01 21:05  真是服了你个老六!!  阅读(5)  评论(0编辑  收藏  举报