进程和线程新增
1. renice 改变正在运行进程的优先级。
2. bg 把挂起的进程放到后台执行。
3. getpid() 获得进程号 getppid() 获得父进程的进程号。
4. WEXITSTATUS(s) 在父进程中返回子进程号。
5. 一个线程最大只有8M内存。
6. 每个线程私有的资源:线程ID(TID) PC和相关寄存器 堆栈 errno 信号掩码和优先级 执行状态和属性
7. -D_REENTRANT 优化线程生成可重入代码
8. int kikk(pid_t, int sig); int raise(int sig); raise 只允许给自己发信号。
9. 信号通信signal函数原型 typedef void (*sighandler_t)(int) sighandler_t signal(int signum, sighandler_t handler);
10. 常用的进程通信方式:
1)传统方式:无名管道(pipe),有名管道(fifo),信号(signal)灯
2)System V IPC对象:共享内存(share memory),消息队列(message queue),信号灯(semaphore)
3)BSD:套接字
11. share memory:
1)int shmget(key_t key, int size, int shmflg);获得共享内存
2)char *shmat(int shmid, const void *shmaddr, int shmflag);映射到内存
3)int shmdt(const void *shmaddr);撤销映射
4)int shmctl(int shmid, int cmd, struct shmid_ds *buf);可以用于删除内存。
12. 打开消息队列:megget 添加消息:megsnd 读取消息:msgrcv 控制消息:msgctl
13. 信号灯的种类:
1)POSIX 有名信号灯(线程之间)
2)POSIX无名信号灯(基于内存)
3)System V信号灯(IPC对象)
14. System V 信号灯权限
1)int semget(key_t key, int nsems, int semflg); nsems,信号灯的数目 semflg 权限:IPC_CREAT|0666
2)int semctl(int semid,int semnum, int cmd, union semun arg) 信号控制,可以用于设置信号灯的值,此时cmd为SETVAL。
3)int semop(int semid, struct sembuf*stops, size_t nsops) 结构体sembuf中,-1:分配资源,p操作,消费者 1:释放资源,v操作,生产者。 0:等待。