摘要: 35.1 内容 在当前的 minishell 中,如果执行 date clear 命令等,minishell 会停止: 这是因为引入进程组的时候,mshell 放置在前台进程组,同时之后在子进程中又创建了一个进程组,在代码中,第二个进程组在没有将其设置为前台进程组之前,一直是后台进程组。那么后台进程 阅读全文
posted @ 2018-12-30 22:51 游戏进行中 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 31.1 SIGCHLD 信号 子进程状态发生变化(子进程结束)产生该信号,父进程需要使用 wait 调用来等待子进程结束并回收它。 避免僵尸进程 31.2 信号发送 除了内核和超级用户,并不是每个进程都可以向其他的进程发送信号 一般的进程只能向具有相同 uid 和 gid 的进程发送信号,或向相同 阅读全文
posted @ 2018-12-30 21:53 游戏进行中 阅读(1417) 评论(0) 推荐(0) 编辑
摘要: 32.1 不可靠信号问题 发生信号时关联动作被重置为默认设置 信号可能丢失 程序片段 在进入 sig_int 与再次调用 signal 之间发生的 SIGINT 信号将不会捕获 导致进程终止 信号可能丢失 程序片段 在进入 sig_int 与再次调用 signal 之间发生的 SIGINT 信号将不 阅读全文
posted @ 2018-12-30 21:53 游戏进行中 阅读(561) 评论(0) 推荐(0) 编辑
摘要: 33.1 中断系统调用 进程调用 “慢” 系统调用时,如果发生了信号,内核会重启系统调用。 慢系统调用 可能会永久阻塞的系统调用 从终端设备、管道或网络设备上的文件读取 向上述文件写入 某些设备上的文件打开 pause 和 wait 系统调用 一些设备的 ioctl 操作 一些进程间通信函数 可能会 阅读全文
posted @ 2018-12-30 21:53 游戏进行中 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 34.1 信号特点 信号的发生是随机的,但信号在何种条件下发生是可预测的 进程杠开始启动时,所有信号的处理方式要么默认,要么忽略;忽略是 SIGUSR1 和 SIGUSR2 两个信号,其他都采取默认方式(大多数是终止进程)。 进程在调用 exec 函数后,原有信号的捕捉函数失效 子进程的诞生总是继承 阅读全文
posted @ 2018-12-30 21:53 游戏进行中 阅读(557) 评论(0) 推荐(0) 编辑
摘要: 编程内容: 1.完成 echo env export 命令 2.完成前后台进程 3.完成重定向 完整代码如下: 29.1 主函数、通用头文件和Makefile 29.1.1 主函数 mshell_main.c 29.1.2 通用文件 mshell_common.h mshell_common.c 2 阅读全文
posted @ 2018-12-30 21:52 游戏进行中 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 30.1 信号的基本概念 信号(signal)机制是Linux 系统中最为古老的进程之间的通信机制,解决进程在正常运行过程中被中断的问题,导致进程的处理流程会发生变化 信号是软件中断 信号是异步事件 不可预见 信号有自己的名称和编号 信号和异常处理机制 信号发生的来源 硬件来源:如按下键盘或其他硬件 阅读全文
posted @ 2018-12-30 21:52 游戏进行中 阅读(466) 评论(0) 推荐(0) 编辑