Linux 中线程就是共享上下文的进程

  • fork()创建进程

运行结果:

相当于利用父进程创建了一个子进程并从fork()开始向下进行

  • 孤儿进程
    父进程结束子进程并不会强制结束
    利用sleep使父进程先运行结束
    运行结果:

可以看到子进程的父进程改变了(孤儿进程托孤给init进程, 每个进程都必须有父进程)

  • 僵尸进程
    孤儿进程相反
    当子进程先结束的时候
    子进程必须等到父进程捕获到了子进程的结束状态才能真正退出
    可以看到僵尸进程

僵尸进程<defunct>标记(如果系统中存在过多的僵尸进程, 将会使得新的进程不能产生)

  • vfork()创建进程
    需要使用exit()来结束进程
    vfork()创建出来的进程会和父进程共享数据(共享内存)
    并且会阻塞父进程(保证子进程先执行)
    如果子进程的执行依赖父进程的进一步操作则会产生死锁

  • pipe通信
    //pipe只能单向通信
    //必须在fork()之前调用pipe(pipeTemp)

管道入口:write(pipeTemp[1],msg,strlen(msg)+1)

管道出口: read(pipeTemp[0],msg,strlen(msg)+1)

在父/子进程中将不需要的口关闭close(pipeTemp[n])

  • 消息队列
  • 共享内存
    system("ipcs -m")获取共享内存信息