linux进程

一、进程
PCB:进程控制块
exec族:除了进程ID,用户空间的代码和数据完全被新程序替换。
创建子进程:fork(),返回非负数为父进程,返回零为子进程,返回负数调用失败。
等待子进程结束:wait(),一个方法等待一个子进程结束后传出状态码,失败返回负数。
二、进程共享
利用文件通信FIFO:
int fd = open("test.txt", O_RDWR);
close(fd);
半双工管道通信PIPE:
int pipefd[2];
int pipe(int pipefd[2]);
多端读多端写通信MMAP:
void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
MMAP释放内存:
int munmap(void *addr, size_t length);
三、信号
标准信号和预留的驱动信号
信号注册:
typedef void (*sighandler_t)(int);
信号到达的处理方法:
void catchsigiint(int signo);
旧的信号处理方法:
       sighandler_t handler;
信号号码与处理方法绑定:
       handler = signal(SIGINT, catchsigiint);
sigaction方法的处理方式:
struct sigaction {
      void     (*sa_handler)(int);
      sigset_t   sa_mask;
      int        sa_flags;
   };
将信号集初始化和清空
int sigemptyset(sigset_t *set);
添加quit信号到信号集合
int sigaddset(sigset_t *set, int signum);
默认属性(处理函数执行期间,屏蔽本信号)
sa_flags = 0;
信号号码与处理方式绑定
sigaction(SIGINT, &sigaction, NULL);
进程控制块有信号集☆决定进程屏蔽哪些信号,信号函数处理执行期间所屏蔽的信号用sa_mask来指定,调用完再恢复为☆。

发表评论