随笔分类 - 进程线程
摘要:互斥量常用来做线程间同步,不过,我们可以恰当设置其属性实现进程间同步 互斥量类型为pthread_mutexattr_t,使用pthread_mutexattr_init函数来初始化,使用pthread_mutexattr_setpshared来设置pshared属性,进程锁属性设置为PTHREAD
阅读全文
摘要:linux下进程退出有8中方式 这里区分一下exit和_exit exit 我们知道父进程要wait子进程的退出状态,在子进程退出到父进程调用wait()期间,子进程就处于僵尸状态。因此,exit()将进程正常退出,并将(status & 0377)返回到父进程的wait(),其中status可以是
阅读全文
摘要:进程在其声明周期内,由于系统中各个进程之间的相互制约关系及系统的运行环境的变化,使得进程的状态也在不断发生变化,即一个进程会经历不同的状态 五种状态 1. 运行状态 进程在处理器上运行。在单处理器环境下,同一时刻只有一个进程在运行 2. 就绪状态 进程处于准备运行的状态。进程获得了除处理器之外的所有
阅读全文
摘要:在linux下,创建进程可以使用两个glibc函数,分别是 fork, vfork fork fork函数用来创建一个子进程,声明如下: #include <sys/types.h> #include <unistd.h> pid_t fork(void); fork函数,一次调用,两次返回。在父进
阅读全文
摘要:使用 ulimit -a 命令,查看 max user processes 的输出,就是系统最大进程数 max user processes 的值默认是 # cat /proc/sys/kernel/threads-max的值/2,即系统线程数的一半
阅读全文
摘要:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> #include <assert.h> // 任务结构体,使用队列保存 typedef struct
阅读全文
摘要:由来 在linux下,如果一个进程终止,内核会释放该进程使用的所有存储区,关闭所有文件句柄等,但是,内核会为每个终止子进程保留一定量的信息。这些信息至少包括进程ID,进程的终止状态,以及该进程使用的CPU时间。当终止子进程的父进程调用wait或waitpid时就可以得到这些信息 僵尸进程指:一个进程
阅读全文
摘要:消息队列是在两个进程间传递二进制数据的方法。每个数据块都有一个类型,接受方可以根据类型来有选择地接受数据,不需要像管道一样必须按照先进先出的顺序。 linux消息队列有四个系统调用:msgget, msgsnd, msgrcv, msgctl msgget 创建/获取一个消息队列。key是唯一键值,
阅读全文
摘要:共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输。这种高效带来的问题是,我们必须用其他手段来同步进程对共享内存的访问,否则会产生竞态条件。所以,共享内存通常和其他进程间通信方式一起使用。 linux 共享内存有四个系统调用:shmget, shmat, shmdt, shmctl s
阅读全文
摘要:ipcs 命令,可以看到当前系统上的共享资源实例 ipcrm 命令,可以删除一个共享资源实例 linux 操作信号量的函数有三个:semget, semop, semctl semget 声明为: key 是一个键值,用来标识一个全局唯一的信号量集。要通过信号量通信的进程需要使用相同的键值来获取该信
阅读全文
摘要:相对于无名管道来说,socketpair也是使用在亲缘进程之间,不过它提供了能够全双工通信的通道 man socketpair: 该sv保存的两个文件描述符,能写也能读
阅读全文
摘要:特点 无名管道是半双工的,也就是说,一个管道要么只能读,要么只能写 只能在有共同祖先的进程间使用(父子进程、兄弟进程、子孙进程等) fork或者execve调用创建的子进程,继承了父进程的文件描述符 通过man 2 pipe查看 打开两个文件描述符,保存在pipefd中,其中pipefd[0]为读端
阅读全文
摘要:sigaction函数是设置信号处理的接口。比signal函数更健壮 signum指除了SIGKILL 和 SIGSTOP之外,要捕获的信号。struct sigaction *act是要安装的信号。结构题定义为: 其中,sa_handler为信号的处理函数。sa_mask设置在进程原有信号掩码基础
阅读全文
摘要:使用kill -l 命令,可看到linux支持的信号列表: 其中,编号1-31的信号为传统unix支持的信号,是不可靠信号(非实时),编号32-63信号是后来扩充的,为可靠信号(实时信号)。不可靠信号和可靠信号区别是,前者不支持排队,可能会造成信号丢失。后者不会。 1-31 信号释义: 1) SIG
阅读全文
摘要:信号是由用户、系统、进程发给目标进程的信息,以通知目标进程某个状态的改变或者系统异常。linux信号产生条件为: 在终端输入字符,比如ctrl+z 系统异常 系统状态变化。比如 alarm 定时器到期产生SIGALRM信号 运行kill或者调用kill函数 查看Linux支持的信号命令:kill -
阅读全文