我在进程ID和线程ID之间有一些混淆.我已经经历了几个网络帖子,包括堆栈溢出here,其中说
starting a new process gives you a new PID and a new TGID,while starting a new thread gives you a new PID while maintaining the same TGID.
所以当我运行程序时为什么从程序创建的所有线程都没有不同的PID?
我知道在编程中我们通常会说main是一个线程,执行从main开始,所以如果我从main创建多个线程,所有线程将具有相同的PID,它等于main的PID.
所以我想问的是如下:
1)当我们运行程序时,它将作为进程或线程运行?
2)主线程创建线程和进程创建线程之间有什么区别吗?
3)linux中的线程和进程有什么区别吗?因为我读到某个地方,linux没有区分线程和进程.
最佳答案
简化一下:
> PID是进程ID,TID是线程ID.问题是对于fork()创建的第一个线程,PID = TID.如果使用clone()命令在进程中创建更多线程,则PID和TID将不同,PID将始终小于TID.
>不,没有区别,除非主要被杀,所有其他线程也被杀死.
>是的,线程是实际安排的.从技术上讲,该过程只是不同代码段(文本,bss,堆栈,堆和OS)的内存映射.