注释
这部分很多内容与实验报告有关,等待我实验课结束将公开实验课上做的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);