求教:关于进程id的问题。
这段时间一直在研究进程id,进程组id,以及会话id的问题。得出一些结论,希望高手看看对不对。
下面是一个程序。
- #include <unistd.h>
- #include <sys/types.h>
- mian()
- {
- pid_t pid;
- if((pid=fork())==0)
- {
- setsid();
- printf(“I’m a child,my id is %dn”,getpid());
- printf(“My group id is %dn”,getpgid(0));
- printf(“My father id is %dn”,getppid());
- printf(“My session id is %dn”,getsid(0));
- }
- else
- {
- printf(“I’m a father,my id is %dn”,getpid());
- printf(“My group id is %dn”,getpgid(0));
- printf(“My father id is %dn”,getppid());
- printf(“My session id is %dn”,getsid(0));
- }
- }
复制代码
运行这个程序:
- [liuning@LINUX liuning]$ ./getsid
- I’m a child,my id is 17597
- My group id is 17597
- My father id is 17596
- My session id is 17597
- I’m a father,my id is 17596
- My group id is 17596
- My father id is 17564
- My session id is 17564
复制代码
然后变换到超级用户
- [liuning@LINUX liuning]$ su root
- Passeord:
- [lroot@LINUX liuning]$ ./getsid
- I’m a child,my id is 17626
- My group id is 17626
- My father id is 17625
- My session id is 17626
- I’m a father,my id is 17625
- My group id is 17625
- My father id is 17601
- My session id is 17564
复制代码
可以看到在使用命名su之前,father进程的父进程id是17564和进程的会话id一样。我知道shell是用fork函数复制一个自己来执行命令的,这个17564进程就应该是shell进程。也就是该会话的首进程。
然后我们在来看看使用su命令之后,father进程的父进程id变成了17601,会话id不变,他不再是会话ID。
我想问一下father进程的父进程还是不是shell进程了。如果不是它是什么呢,是由谁创建的呢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
顶起来,等待中.
谁来帮帮我啊。
2。you're right
1.我只想了解一下系统的执行流程,所以关于出错处理的东西就没写。(打代码累啊)
2。getpgid(0)表示返回当前进程的进程组ID。我用的也是Redhat 9.0不知道你怎么通不过。
3。哈哈这个不清楚,要查一查了。
4。这个函数返回会话ID也进程会话首进程的ID。
我是新手,说一下我的理解:
[ 本帖最后由 huachong 于 2006-9-11 09:09 编辑 ]