2。 使用ps命令,具体用法是 ps -xH
这样可以查看所有存在的线程,也可以使用grep作进一步的过滤。
3。 使用ps命令,具体用法是 ps -mq PID
这样可以看到指定的进程产生的线程数目。
更进一步,其实一些系统监控工具,在本质上也是读取的系统产生的文件罢了。比如说进程这个事情,
看看这个目录吧,/proc/5000/ 这里面有你所有想要的。其实stat代表着当前的一些信息。
使用ps命令来查看进程的时候,进程状态分别对应的含义如下:
D 不可中断睡眠 (通常是在IO *** 作) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生
R 正在运行或可运行(在运行队列排队中)
S 可中断睡眠 (休眠中, 受阻, 在等待某个条件的形成或接受到信号)
T 已停止的 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行
W 正在换页(2.6.内核之前有效)
X 死进程 (未开启)
Z 僵尸进程 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放BSD风格的
<高优先级(not nice to other users)
N 低优先级(nice to other users)
L 页面锁定在内存(实时和定制的IO)
s 一个信息头
l 多线程(使用 CLONE_THREAD,像NPTL的pthreads的那样)
+ 在前台进程组
主要理解在fork函数。你可以参考
这会产生分支,
fork会产生一个子进程。
根据fork的返回值的不同运行不同的代码。
在子进程返回值是0,而父进程就是调用这个函数的进程中返回的则是进程的ID也就是>0。
所以在子进程中执行
pthread_attr_init(&attr)
pthread_create(&tid,&attr,runner,NULL)
pthread_join(tid,NULL)
printf("CHILD:value=%d",value)
这个子进程会启动一个线程
void*runner(void*param){
value=5
pthread_exit(0)
}
让value=5
所以输出
CHILD:value=5;
而父进程则执行
wait(NULL)
printf("PARENT:value=%d",value)
由于wait()所以它会暂停父进程,等待子进程结束。
子进程结束后,然后父进程运行输出
PARENT:value=0
至于为什么是0,因为子进程和父进程的数据是在内存中各有一份的。
子进程只是改变了它那份。父进程中还是0.
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)