网站防火墙怎么做,中国空间网站,两个网站放在同一个服务器 备案,网站做支付宝和网银接口本篇将介绍Linux的进程管理相关知识#xff0c;并将深入介绍Linux的进程间相互通信。 进程就是运行中的程序#xff0c;一个运行着的程序#xff0c;可能有多个进程。 比如Oracle DB#xff0c;启动Oracle实例服务后#xff0c;就会有多个进程。
Linux进程分类
在 Linux…本篇将介绍Linux的进程管理相关知识并将深入介绍Linux的进程间相互通信。 进程就是运行中的程序一个运行着的程序可能有多个进程。 比如Oracle DB启动Oracle实例服务后就会有多个进程。
Linux进程分类
在 Linux 系统中进程可以分为以下几类
1、用户进程和系统进程
用户进程 –由用户启动的应用程序或服务例如文本编辑器、浏览器、数据库客户端等。 –这些进程在用户的权限下运行通常只能访问用户自己的数据和资源。 –用户进程的优先级相对较低系统会根据资源的可用性和其他因素来调度它们的执行。 系统进程 –由操作系统内核启动的进程用于管理系统资源、提供服务和执行系统级任务。例如init进程或systemd进程是系统启动时第一个运行的进程负责启动其他系统服务和管理系统的运行状态。 –系统进程通常具有较高的优先级以确保系统的稳定运行和对关键任务的响应。 2、前台进程和后台进程 前台进程 –与用户交互的进程通常在终端窗口中运行接收用户的输入并显示输出。例如当你在终端中运行一个命令时该命令对应的进程就是前台进程直到它执行完毕或被中断终端窗口才会恢复可用状态。 后台进程 –在后台运行的进程不与用户直接交互可以在终端窗口继续执行其他命令的同时运行。 –可以通过在命令末尾加上 “” 符号来将一个进程放入后台运行。例如command 。 –后台进程通常用于执行长时间运行的任务如数据备份、文件下载等不会阻塞终端的使用。 3、守护进程Daemon 定义和特点 –守护进程是在后台持续运行的特殊进程通常在系统启动时自动启动并一直运行直到系统关闭。 –它们不与终端关联独立于用户登录和注销负责执行特定的系统任务或提供特定的服务。 –守护进程通常具有较高的稳定性和可靠性能够在系统运行过程中持续提供服务不受用户交互的影响。 常见的守护进程 httpdWeb 服务器守护进程用于提供 HTTP 服务。 sshdSSH 服务器守护进程允许远程用户通过 SSH 协议登录到系统。 crond定时任务守护进程负责按照预定的时间表执行任务。 syslogd系统日志守护进程记录系统中的各种事件和消息。 4、孤儿进程和僵尸进程 孤儿进程 –当一个父进程先于其子进程结束时子进程就成为孤儿进程。 –孤儿进程会被init进程或systemd进程收养由init进程负责管理它们的资源和状态。 僵尸进程 –当一个子进程结束时它的资源并不会立即被释放而是会保留一些状态信息直到父进程读取这些信息为止。在这个期间子进程就成为僵尸进程。 –如果父进程没有正确地处理子进程的结束状态僵尸进程可能会一直存在占用系统资源。 可以使用ps或者top命令查看僵尸进程其状态通常显示为 “Z”。
进程的属性
进程具有以下一些主要属性
1、进程标识符PID
定义每个进程都有唯一的进程标识符Process IDPID用于在系统中标识该进程。 作用操作系统通过 PID 来区分不同的进程进行进程管理和调度。例如使用命令如 ps、top、kill 等时通常需要指定进程的 PID。
2、父进程标识符PPID
定义每个进程都有一个父进程除了初始进程通常是 init 进程或 systemd 进程。父进程标识符Parent Process IDPPID用于标识创建当前进程的父进程。 作用可以通过 PPID 来追踪进程的创建关系了解进程的层次结构。在故障排除时有时可以通过查看父进程的行为来确定子进程出现问题的原因。
3、进程状态
运行状态Running进程正在被 CPU 执行。 就绪状态Ready进程已经准备好被 CPU 执行等待分配 CPU 时间片。 睡眠状态Sleeping进程处于等待状态例如等待 I/O 操作完成、等待信号等。睡眠状态又分为可中断睡眠Interruptible Sleep和不可中断睡眠Uninterruptible Sleep。 停止状态Stopped进程被暂停通常是由于接收到信号如 SIGSTOP。 僵尸状态Zombie子进程已经结束但父进程还没有回收其资源处于僵尸状态的进程只保留一些退出信息等待父进程读取。
4、优先级
定义进程的优先级决定了它在系统中获得 CPU 时间片的机会。优先级高的进程会优先被调度执行。 调整可以使用命令如 nice 和 renice 来调整进程的优先级。优先级数值越低优先级越高。例如nice -n -10 command 以较高优先级启动一个命令renice -n 5 -p PID 将进程的优先级调整为 5。
5、资源占用
CPU 占用进程在运行时会占用 CPU 时间。可以通过工具如 top、htop 等查看进程的 CPU 占用率。 内存占用进程会占用一定数量的内存空间包括代码、数据、栈等。同样可以使用系统工具查看进程的内存使用情况。 文件描述符进程可能会打开文件、网络连接等资源这些资源通过文件描述符来表示。每个进程都有一定数量的文件描述符可用。
6、环境变量
定义进程在运行时可以访问一组环境变量这些变量包含了关于系统和用户配置的信息。 作用环境变量可以影响进程的行为例如指定程序的搜索路径、配置数据库连接参数等。可以通过命令 env 查看当前进程的环境变量也可以在启动进程时设置特定的环境变量。
7、命令行参数
定义当启动一个进程时可以传递一些命令行参数给它。这些参数可以影响进程的行为和功能。 作用例如一个文本编辑器可以接受文件名作为命令行参数直接打开指定的文件。命令行参数可以让进程更加灵活地适应不同的使用场景。
父进程和子进程
为什么要把父进程和子进程单独拿出讲因为很重要啦父进程和子进程是进程关系中的重要概念。
1、父进程与子进程的创建
当一个进程使用特定的系统调用如 fork时它可以创建一个新的进程即子进程。这个新创建的子进程几乎是父进程的一个副本包括代码、数据、打开的文件描述符等。 例如以下是一个使用 C 语言创建子进程的示例代码
2、资源共享与独立性
资源共享 –子进程继承了父进程的许多属性但也有一定的独立性。子进程会继承父进程打开的文件描述符这意味着如果父进程打开了一个文件子进程也可以访问这个文件。 –然而子进程对文件描述符的操作如读取、写入、关闭不会影响父进程除非进行了特定的同步操作。 独立性 –子进程有自己的内存空间、寄存器状态等。虽然子进程开始时与父进程的内存内容相同但后续的修改是独立的。 –子进程的运行不会影响父进程的执行除非通过特定的进程间通信机制如管道、信号、共享内存等进行交互。
3、父子进程的关系管理
父进程责任 –通常父进程负责创建和监控子进程。父进程可以通过系统调用如 wait 或 waitpid等待子进程结束并获取子进程的退出状态。 –如果父进程没有正确地等待子进程结束子进程可能会成为僵尸进程占用系统资源。 子进程行为 –子进程可以独立地执行自己的任务。它可以根据需要修改自己的状态和资源而不会直接影响父进程。 –子进程可以通过 exec 系列函数加载新的程序替换自己的代码和数据从而执行不同的任务。
4、应用场景
并发执行任务 父进程可以创建多个子进程让它们同时执行不同的任务以提高系统的并行性和效率。例如在服务器应用中父进程可以创建多个子进程来处理客户端请求。 资源管理 父进程可以控制子进程的资源分配和使用。例如父进程可以限制子进程的 CPU 时间、内存使用等以确保系统的稳定性和公平性。 进程间通信 父子进程可以通过特定的进程间通信机制进行交互共享数据和状态信息。例如通过管道可以在父子进程之间传递数据。
linux进程通信IPCInter - Process Communication
在 Linux 中进程通信有多种方式以下是常见的几种
管道Pipe
–定义和原理管道是一种半双工的通信方式数据只能单向流动通常用于具有亲缘关系如父子进程的进程之间通信。它是基于文件描述符来实现的通过内核缓冲区来传递数据。 –使用方法通过pipe()系统调用创建管道会返回两个文件描述符一个用于读一个用于写。例如在父子进程通信中父进程可以通过fork()创建子进程后关闭不需要的文件描述符端然后通过write()向管道写入数据子进程通过read()从管道读取数据。
命名管道FIFO
–定义和原理命名管道克服了管道只能用于亲缘关系进程的限制它是一种特殊类型的文件在文件系统中有一个文件名可以被多个无亲缘关系的进程访问。其通信原理也是基于内核缓冲区。 –使用方法可以使用mkfifo()系统调用来创建命名管道。一个进程以写方式打开命名管道另一个进程以读方式打开命名管道这样就可以实现通信。例如进程 A 通过open(“myfifo”, O_WRONLY)打开命名管道用于写数据进程 B 通过open(“myfifo”, O_RDONLY)打开用于读数据。
消息队列Message Queue
–定义和原理消息队列是一个由内核维护的消息链表消息被组织成一个个独立的数据单元每个消息有自己的类型。进程可以向消息队列发送消息也可以从消息队列接收消息消息的发送和接收是异步的。 –使用方法首先通过msgget()系统调用创建或获取一个消息队列标识符。然后通过msgsnd()发送消息消息是一个包含消息类型和消息内容的结构体。接收消息使用msgrcv()可以根据消息类型有选择地接收消息。
共享内存Shared Memory
–定义和原理共享内存是最快的进程通信方式它允许两个或多个进程共享一块内存区域。这些进程可以直接读写这块共享内存就像访问自己的内存空间一样减少了数据复制的开销。不过这种方式需要注意进程之间的同步和互斥问题。 –使用方法使用shmget()系统调用创建或获取共享内存段的标识符。通过shmat()将共享内存段连接到进程的地址空间使进程可以访问共享内存。进程使用完共享内存后通过shmdt()分离共享内存段最后通过shmctl()进行共享内存段的控制如标记为删除等操作。
信号量Semaphore
–定义和原理信号量主要用于实现进程之间的同步和互斥它是一个计数器用于控制对共享资源的访问。当信号量的值大于 0 时表示资源可用当信号量的值等于 0 时表示资源已被占用。 –使用方法通过semget()系统调用创建或获取信号量集的标识符。使用semctl()对信号量进行初始化和控制操作。进程在访问共享资源之前通过semop()操作信号量根据信号量的值来判断是否可以访问资源。
信号Signal
定义和原理信号是一种异步通信机制用于通知进程某个事件的发生。例如当用户按下 Ctrl C 时会向当前进程发送一个SIGINT信号进程收到信号后可以采取相应的措施如终止进程或执行特定的信号处理函数。 使用方法可以使用signal()或sigaction()系统调用来设置信号的处理函数。当信号产生时内核会中断进程的正常执行流程转而执行信号处理函数。 注Linux进程间通讯比较复杂更深层次的介绍需要阅读源码来解读超出了本节的范畴。
进程的管理命令
Linux的进程管理命令有很多限于篇幅和常用性在次重点介绍最常用的三个top/ps/pstree。其他命令会在文末附上方便大家查询使用。
top
top命令是一个用于实时监控系统进程和资源使用情况的强大工具。
1、top命令的输出内容
启动top在终端中输入top并回车即可启动top命令。它会显示系统中正在运行的进程列表以及系统的整体资源使用情况。 进程列表信息 PID进程标识符。 USER进程所有者。 PR进程优先级。 NI进程的 nice 值用于调整优先级。 VIRT进程使用的虚拟内存大小。 RES进程使用的物理内存大小。 SHR进程共享的内存大小。 S进程状态如R运行中、S睡眠中、Z僵尸状态等。 %CPU进程占用的 CPU 百分比。 %MEM进程占用的内存百分比。 TIME进程使用的 CPU 时间。 COMMAND启动进程的命令。 系统资源信息 top命令顶部显示了系统的整体资源使用情况包括 Tasks总进程数、正在运行的进程数、睡眠中的进程数等。 Cpu(s)CPU 使用率包括用户空间、系统空间、空闲时间等的百分比。 Mem内存使用情况包括总内存、已使用内存、空闲内存等。 Swap交换空间使用情况。
2、交互操作
排序 按P键可以按照 CPU 使用率对进程列表进行排序从高到低显示占用 CPU 最多的进程。 按M键可以按照内存使用率对进程列表进行排序。 刷新 默认情况下top会定期自动刷新显示。也可以按空格键手动刷新。 退出 按q键可以退出top命令。 查看特定进程 在top运行时可以输入进程的 PID然后按回车键即可聚焦显示该特定进程的信息。 切换显示模式 按l键可以切换显示平均负载和任务数。 按t键可以切换显示进程的 CPU 时间和累计时间。 改变更新频率 按s键可以设置top的更新频率输入一个数字表示更新时间间隔以秒为单位。
3、高级用法
命令行参数
top -b以批处理模式运行top不显示交互界面适合将输出重定向到文件或其他程序进行分析。
top -n 10只显示 10 次更新然后自动退出。
top -d 5设置更新时间间隔为 5 秒。 过滤进程 在top运行时可以输入/后跟一个关键字如进程名称或用户名称来过滤显示的进程列表。例如输入/firefox可以只显示与 Firefox 相关的进程。 保存配置 top的一些配置可以保存在用户的~/.toprc文件中以便下次启动时自动应用这些配置。例如可以设置默认的排序方式、更新频率等。
PS
psprocess status命令用于显示当前系统中的进程状态。
1、基本用法
显示当前用户的进程 ps默认情况下只显示当前用户在当前终端中启动的进程。 显示所有用户的进程
ps -ef以全格式显示系统中的所有进程信息包括进程的用户、PID、PPID、CPU 使用率、内存使用情况、启动时间、命令等。
ps aux也显示系统中的所有进程信息但输出格式略有不同更易读通常和grep及管道命令搭配使用以提高效率。
2、输出字段解释
UID进程所有者的用户 ID。 PID进程标识符。 PPID父进程标识符。 CCPU 使用率。 STIME进程启动时间。 TTY控制终端的设备名称。 TIME进程使用的 CPU 时间。 CMD启动进程的命令。
3、筛选特定进程
根据 PID 筛选
ps -p PID显示指定 PID 的进程信息。可以指定多个 PID用逗号分隔。例如ps -p 1234,5678。 根据进程名称筛选
ps -C process_name显示指定名称的进程信息。例如ps -C firefox显示所有与 Firefox 相关的进程。 根据用户筛选
ps -u username显示指定用户的进程信息。例如ps -u john显示用户 john 拥有的进程。 4、输出格式控制 自定义输出字段
ps -o field1,field2,...指定要显示的字段。例如ps -o pid,cmd只显示进程 ID 和命令。 以树形结构显示进程关系
ps -ef --forest以树形结构显示进程的父子关系更直观地看出进程的层次结构。
5、高级用法结合其他命令使用 可以将ps的输出作为其他命令的输入进行进一步的处理。例如ps -ef | grep process_name可以查找特定名称的进程。
ps -ef | awk {print $2}可以提取所有进程的 PID。 实时监控进程
watch -n 1 ps -ef每 1 秒执行一次ps -ef命令实时监控系统中的进程变化。 按特定条件排序
ps -ef --sort-pcpu按 CPU 使用率从高到低排序显示进程。可以使用不同的排序字段如-pmem按内存使用率排序。
pstree
pstree命令用于以树形结构显示进程之间的关系。
1、基本用法
显示所有进程的树形结构 pstree默认情况下以树形结构显示系统中所有进程的关系每个进程用进程名称表示父进程和子进程之间用连线连接。 显示特定用户的进程树 pstree -u username显示指定用户的进程树。例如pstree -u john显示用户 john 拥有的进程及其关系。
2、输出格式控制
显示进程 PID pstree -p在进程名称后面显示进程的 PID。例如init(1)-±acpid(2777)表示进程init的 PID 是 1acpid的 PID 是 2777。 显示完整命令行 pstree -a在进程名称后面显示完整的命令行参数。这对于了解进程的具体启动参数很有帮助。 同时显示 PID 和完整命令行 pstree -ap结合了上述两种选项既显示进程 PID又显示完整命令行。
3、高级用法
过滤特定进程
pstree | grep process_name可以使用管道将pstree的输出传递给grep命令以过滤显示特定进程及其子进程。例如pstree | grep firefox显示与 Firefox 相关的进程树。 以特定格式输出 pstree -A以 ASCII 艺术形式显示进程树更加美观。但这种格式可能在某些终端中显示不完整。 pstree -G以不同的颜色显示不同类型的进程增强可读性。但需要终端支持颜色显示。 结合其他工具使用 可以将pstree的输出重定向到文件以便进一步分析。例如pstree process_tree.txt将进程树保存到文件中。 也可以在脚本中使用pstree来获取进程信息进行自动化的系统管理任务。
附进程管理命令大全95%以上
进程管理相关命令{ ps -eaf # 查看所有进程kill -9 PID # 强制终止某个PID进程kill -15 PID # 安全退出 需程序内部处理信号cmd # 命令后台运行nohup cmd # 后台运行不受shell退出影响ctrlz # 将前台放入后台(暂停)jobs # 查看后台运行程序bg 2 # 启动后台暂停进程fg 2 # 调回后台进程pstree # 进程树vmstat 1 9 # 每隔一秒报告系统性能信息9次sar # 查看cpu等状态lsof file # 显示打开指定文件的所有进程lsof -i:32768 # 查看端口的进程renice 1 180 # 把180号进程的优先级加1exec sh a.sh # 子进程替换原来程序的pid 避免supervisor无法强制杀死进程ps{ps aux |grep -v USER | sort -nk 4 | tail # 显示消耗内存最多的10个运行中的进程以内存使用量排序.cpu 3# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND%CPU # 进程的cpu占用率%MEM # 进程的内存占用率VSZ # 进程虚拟大小,单位K(即总占用内存大小,包括真实内存和虚拟内存)RSS # 进程使用的驻留集大小即实际物理内存大小START # 进程启动时间和日期占用的虚拟内存大小 VSZ - RSSps -eo pid,lstart,etime,args # 查看进程启动时间}top{前五行是系统整体的统计信息。第一行: 任务队列信息同 uptime 命令的执行结果。内容如下01:06:48 当前时间up 1:22 系统运行时间格式为时:分1 user 当前登录用户数load average: 0.06, 0.60, 0.48 系统负载即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。第二、三行:为进程和CPU的信息。当有多个CPU时这些内容可能会超过两行。内容如下Tasks: 29 total 进程总数1 running 正在运行的进程数28 sleeping 睡眠的进程数0 stopped 停止的进程数0 zombie 僵尸进程数Cpu(s): 0.3% us 用户空间占用CPU百分比1.0% sy 内核空间占用CPU百分比0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比98.7% id 空闲CPU百分比0.0% wa 等待输入输出的CPU时间百分比0.0% hi0.0% si第四、五行:为内存信息。内容如下Mem: 191272k total 物理内存总量173656k used 使用的物理内存总量17616k free 空闲内存总量22052k buffers 用作内核缓存的内存量Swap: 192772k total 交换区总量0k used 使用的交换区总量192772k free 空闲交换区总量123988k cached 缓冲的交换区总量。内存中的内容被换出到交换区而后又被换入到内存但使用过的交换区尚未被覆盖该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。进程信息区,各列的含义如下: # 显示各个进程的详细信息序号 列名 含义a PID 进程idb PPID 父进程idc RUSER Real user named UID 进程所有者的用户ide USER 进程所有者的用户名f GROUP 进程所有者的组名g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?h PR 优先级i NI nice值。负值表示高优先级正值表示低优先级j P 最后使用的CPU仅在多CPU环境下有意义k %CPU 上次更新到现在的CPU时间占用百分比l TIME 进程使用的CPU时间总计单位秒m TIME 进程使用的CPU时间总计单位1/100秒n %MEM 进程使用的物理内存百分比o VIRT 进程使用的虚拟内存总量单位kb。VIRTSWAPRESp SWAP 进程使用的虚拟内存中被换出的大小单位kb。q RES 进程使用的、未被换出的物理内存大小单位kb。RESCODEDATAr CODE 可执行代码占用的物理内存大小单位kbs DATA 可执行代码以外的部分(数据段栈)占用的物理内存大小单位kbt SHR 共享内存大小单位kbu nFLT 页面错误次数v nDRT 最后一次写入到现在被修改过的页面数。w S 进程状态。D不可中断的睡眠状态R运行S睡眠T跟踪/停止Z僵尸进程 父进程在但并不等待子进程x COMMAND 命令名/命令行y WCHAN 若该进程在睡眠则显示睡眠中的系统函数名z Flags 任务标志参考 sched.h}列出正在占用swap的进程{#!/bin/bashecho -e PID\t\tSwap\t\tProc_Name# 拿出/proc目录下所有以数字为名的目录进程名是数字才是进程其他如sys,net等存放的是其他信息for pid in ls -l /proc | grep ^d | awk { print $9 }| grep -v [^0-9]do# 让进程释放swap的方法只有一个就是重启该进程。或者等其自动释放。放# 如果进程会自动释放那么我们就不会写脚本来找他了找他都是因为他没有自动释放。# 所以我们要列出占用swap并需要重启的进程但是init这个进程是系统里所有进程的祖先进程# 重启init进程意味着重启系统这是万万不可以的所以就不必检测他了以免对系统造成影响。if [ $pid -eq 1 ];then continue;figrep -q Swap /proc/$pid/smaps 2/dev/nullif [ $? -eq 0 ];thenswap$(grep Swap /proc/$pid/smaps \| gawk { sum$2;} END{ print sum })proc_name$(ps aux | grep -w $pid | grep -v grep \| awk { for(i11;iNF;i){ printf(%s ,$i); }})if [ $swap -gt 0 ];thenecho -e ${pid}\t${swap}\t${proc_name}fifidone | sort -k2 -n | awk -F\t {pid[NR]$1;size[NR]$2;name[NR]$3;}END{for(id1;idlength(pid);id){if(size[id]1024)printf(%-10s\t%15sKB\t%s\n,pid[id],size[id],name[id]);else if(size[id]1048576)printf(%-10s\t%15.2fMB\t%s\n,pid[id],size[id]/1024,name[id]);elseprintf(%-10s\t%15.2fGB\t%s\n,pid[id],size[id]/1048576,name[id]);}}}linux操作系统提供的信号{kill -l # 查看linux提供的信号trap echo aaa 2 3 15 # shell使用 trap 捕捉退出信号# 发送信号一般有两种原因:# 1(被动式) 内核检测到一个系统事件.例如子进程退出会像父进程发送SIGCHLD信号.键盘按下controlc会发送SIGINT信号# 2(主动式) 通过系统调用kill来向指定进程发送信号# 进程结束信号 SIGTERM 和 SIGKILL 的区别: SIGTERM 比较友好进程能捕捉这个信号根据您的需要来关闭程序。在关闭程序之前您可以结束打开的记录文件和完成正在做的任务。在某些情况下假如进程正在进行作业而且不能中断那么进程可以忽略这个SIGTERM信号。# 如果一个进程收到一个SIGUSR1信号然后执行信号绑定函数第二个SIGUSR2信号又来了第一个信号没有被处理完毕的话第二个信号就会丢弃。SIGHUP 1 A # 终端挂起或者控制进程终止SIGINT 2 A # 键盘终端进程(如controlc)SIGQUIT 3 C # 键盘的退出键被按下SIGILL 4 C # 非法指令SIGABRT 6 C # 由abort(3)发出的退出指令SIGFPE 8 C # 浮点异常SIGKILL 9 AEF # Kill信号 立刻停止SIGSEGV 11 C # 无效的内存引用SIGPIPE 13 A # 管道破裂: 写一个没有读端口的管道SIGALRM 14 A # 闹钟信号 由alarm(2)发出的信号SIGTERM 15 A # 终止信号,可让程序安全退出 kill -15SIGUSR1 30,10,16 A # 用户自定义信号1SIGUSR2 31,12,17 A # 用户自定义信号2SIGCHLD 20,17,18 B # 子进程结束自动向父进程发送SIGCHLD信号SIGCONT 19,18,25 # 进程继续曾被停止的进程SIGSTOP 17,19,23 DEF # 终止进程SIGTSTP 18,20,24 D # 控制终端tty上按下停止键SIGTTIN 21,21,26 D # 后台进程企图从控制终端读SIGTTOU 22,22,27 D # 后台进程企图从控制终端写缺省处理动作一项中的字母含义如下:A 缺省的动作是终止进程B 缺省的动作是忽略此信号将该信号丢弃不做处理C 缺省的动作是终止进程并进行内核映像转储(dump core),内核映像转储是指将进程数据在内存的映像和进程在内核结构中的部分内容以一定格式转储到文件系统并且进程退出执行这样做的好处是为程序员提供了方便使得他们可以得到进程当时执行时的数据值允许他们确定转储的原因并且可以调试他们的程序。D 缺省的动作是停止进程进入停止状况以后还能重新进行下去一般是在调试的过程中例如ptrace系统调用E 信号不能被捕获F 信号不能被忽略}本篇完结。 码字不易宝贵经验分享不易请各位支持原创转载注明出处多多关注作者。