摘要:
终端 在 UNIX 系统中,用户通过终端登录系统后得到一个 shell 进程,这个终端成为 shell 进程的控制终端(Controlling Terminal),进程中,控制终端是保存在 PCB 中的信息,而 fork() 会复制 PCB 中的信息,因此由 shell 进程启动的其它进程的控制终端 阅读全文
摘要:
共享内存 共享内存允许两个或多个进程共享物理内存的同一块区域(通常称为段) 一个共享内存段会成为一个进程用户空间的一部分, 因此这种IPC机制无需内核介入, 所有需要做的就是让一个进程将数据复制进共享内存中, 并且这部分数据会对其他所有共享同一个段的进程可用 管道是要求发送进程将数据从用户空间的缓冲 阅读全文
摘要:
SIGCHLD信号产生的条件 子进程终止时 子进程接收到 SIGSTOP 信号停止时 子进程处在停止态,接受到SIGCONT后唤醒时 以上三种条件都会给父进程发送 SIGCHLD 信号,父进程默认会忽略该信号 父进程捕捉到SIGCHLD信号时调用wait, waitpid回收子进程资源, 解决僵尸进 阅读全文
摘要:
#include <signal.h> int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); - 功能: 检查或者改变信号的处理, 信号捕捉 - 参数: - signum: 需要捕捉的信号的 阅读全文
摘要:
信号集 许多信号相关的系统调用都需要能表示一组不同的信号,多个信号可使用一个称之为信号集的数据结构来表示,其系统数据类型为 sigset_t(64位的整数)。 在 PCB(进程控制块) 中有两个非常重要的信号集。一个称之为 “阻塞信号集” (阻塞信号递达),另一个称之为“未决信号集” (没有递达的信 阅读全文
摘要:
#include <signal.h> typedef void (*sighandler_t)(int); 函数指针, int 类型的参数表示捕捉到的信号的值 sighandler_t signal(int signum, sighandler_t handler); - 功能: 设置某个信号的捕 阅读全文
摘要:
#include <sys/time.h> int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value); - 功能: 设置定时器(闹钟), 可以替代alarm函数, 精度微妙(us) 阅读全文
摘要:
#include <unistd.h> unsigned int alarm(unsigned int seconds); - 功能: 设置定时器, 函数调用后开始倒计时, 当倒计时为0时, 函数会给当前进程发送一个信号:SIGALARM - 参数: seconds: 倒计时的时长, 单位:秒. - 阅读全文
摘要:
#include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig); - 功能: 给某个进程pid, 发送某个信号sig - 参数: - pid: >0: 将信号发送给指定的进程 =0: 将信号发送给当前的进程组 =-1: 阅读全文
摘要:
信号概念 信号是 Linux 进程间通信的最古老的方式之一,是事件发生时对进程的通知机制,有时也称之为软件中断,它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某一个突发事件。 发往进程的诸多信号,通常都是源于内核。引 阅读全文
摘要:
内存映射(Memory-mapped I/O)是将磁盘文件的数据映射到内存,用户通过修改内存就能修改磁盘文件。 mmap #include <sys/mman.h> void *mmap(void *addr, size_t length, int prot, int flags, int fd, 阅读全文
摘要:
chatA.c //有名管道实现简单版聊天功能 #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <stdlib.h> #include <fcntl.h> #in 阅读全文
摘要:
/* 实现 ps aux | grep xxx 父子进程间通信 子进程 : ps aux, 子进程结束后将数据发送给父进程 父进程 : 获取到数据,guolv pipe() execlp() 子进程将标准输出 stdout_fileno 重定向到管道的写端 dup2() */ #include <s 阅读全文
摘要:
进程间通信 进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源。 不同的进程需要进行信息的交互和状态传递(如: 数据传输/通知事件/资源共享/进程控制) , 因此需要进程间通信(IPC: Inter Pro 阅读全文
摘要:
进程回收 在每个进程退出的时候,内核释放该进程所有的资源、包括打开的文件、占用的内存等。但是仍然为其保留一定的信息,这些信息主要主要指进程控制块PCB的信息(包括进程号、退出状态、运行时间等)。 父进程可以通过调用wait或waitpid得到它的退出状态同时彻底清除掉这个进程。 wait() 和 w 阅读全文
摘要:
进程退出 #include <stdlib.h> void exit(int status); #include <unistd.h> void _exit(int status); /* #include<stdlib.h> void exit(int status); #include<unis 阅读全文
摘要:
execl : 执行文件函数 #include <unistd.h> int execl(const char *pathname, const char *arg, ... ); 执行参数path字符串所代表的文件路径 参数: - path: 需要指定的执行的文件的路径或者名称(推荐使用绝对路径) 阅读全文
摘要:
调用fork函数后, 相当于复制一份地址空间出来, 父子进程代码段(.text)是相同的, 但栈空间是没有关系的, 它们依据各自栈空间的值执行各自的判断逻辑 在内核区中, 父进程和子进程的pid是不一样的 父子进程的关系: fork()函数的返回值不同 pcb(progress control bl 阅读全文
摘要:
一个进程创建了新的进程, 这个新进程即为子进程,子进程还可以再创建子进程,形成进程数结构 fork函数 #include <sys/types.h> #include <unistd.h> pid_t fork(void); 作用: 用于创建子进程 返回: 返回两次,一次在父进程中,一次在子进程中 阅读全文
摘要:
进程状态 三态模型:就绪态、运行态、阻塞态 五态模型:新建态、就绪态、运行态、阻塞态、终止态 新建态: 进程刚被创建,未进入就绪队列 就绪态:进程具备运行条件,等待系统分配处理器以便运行。可能会有多个,排成一个队列。 运行态:进程占有处理器正在运行 阻塞态:进程不具备运行条件,等待某个事件完成 终止 阅读全文