注释
这部分很多内容与实验报告有关,等待我实验课结束将公开实验课上做的md随笔
注释
这部分更多的还是实践,因此故意略去大量的函数使用细节,尽量只记录原理
多进程 链接到标题
注释
参见实验3的随笔
fork 链接到标题
只想要知道如何复制进程,那么知道
#include <unistd.h>
pid_t fork(void);
即可
exec类 链接到标题
这是一类函数,每一个函数都是替换进程为新程序,但是效果都有一些细微差别,最经典的形式如下
#include <stdlib.h>
int execve(const char *filename, char *const argv[], char *const envp[]);
其他的看下面的表
接受一组参数,以空指针代表结束 | 先构造参数表,再将指向它的指针传入 | |
---|---|---|
需要指定绝对路径 | execl | execv |
在最后一个参数指定的环境变量下运行 | execle | execve |
在当前PATH中寻找 | execvp | execvpe |
进程等待 链接到标题
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
多线程 链接到标题
注释
参见实验4获取更多实例程序
- 进程资源消耗大,且信息传递麻烦,这就是为什么要使用线程的原因
- 线程提供符合POSIX标准的线程库,所以 链接时需要使用
-lpthread
gcc -o test test.c -lpthread
线程创建 链接到标题
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
等待结束 链接到标题
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
获取线程ID 链接到标题
#include <pthread.h>
pthread_t pthread_self(void);
线程结束 链接到标题
#include <pthread.h>
int pthread_exit(void *retval);