Linux 进程操作(系统调用)
-
创建 :
fork()-- 复制当前进程,返回两次(父进程得子进程PID,子进程得0)。常配合exec族函数(如execlp)执行新程序。 -
终止 :
exit(int status)(标准C库,刷新缓冲区)或_exit(int status)(直接内核调用)。进程退出码由父进程收集。 -
等待 :
wait(int *status)或waitpid(pid_t pid, int *status, int options)-- 父进程阻塞回收子进程资源,防止僵尸进程。
Linux 线程操作(POSIX pthread)
-
创建 :
pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)-- 创建新线程执行指定函数。 -
终止 :线程函数
return;或调用pthread_exit(void *retval);或被pthread_cancel(pthread_t thread)取消。 -
等待 :
pthread_join(pthread_t thread, void **retval)-- 阻塞等待指定线程结束,回收资源并获取返回值。 -
分离 :
pthread_detach(pthread_t thread)-- 使线程结束后自动释放资源,无需join。
C++ 标准线程库(C++11 起)
-
创建 :
std::thread t(func, args...)-- 构造即启动线程。 -
等待 :
t.join()-- 阻塞等待线程完成。 -
分离 :
t.detach()-- 让线程在后台运行,不再可join。 -
注意 :必须在线程对象销毁前调用
join()或detach(),否则程序终止。使用std::jthread(C++20)可自动join。
关键区别与同步
-
进程独立地址空间,线程共享内存(需同步:互斥锁
std::mutex、条件变量等)。 -
资源回收:进程必须
wait,线程要么join要么detach。 -
现代C++优先使用
std::thread,底层仍是pthread(Linux上)。