QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1013|回复: 1

linux多进程中的static变量怎么了?!!急。

[复制链接]
发表于 2005-3-21 10:34:16 | 显示全部楼层 |阅读模式
我得代码是这样的:
#include <stdio.h>
#include <stdlib.h>

int main()
{
        char buf[100]={'\0'};
        int pid;
        static int aa;
        for ( ; ; ) {
                memset(buf,'\0',100);
                if(strcmp(buf,"quit\n")==0)
                        break;
       
                switch ( pid=fork() ) {
                        case -1:
                                _exit(0);
                        case 0:{
                                fgets(buf,100,stdin);
                                aa = getpid();
                                printf("this is child pid is:%d static address:%d\n",aa,&aa);
                                execl("/bin/sh","sh","-c",buf,(char *) 0);
                                _exit(0);
                        }
                        default:
                                wait(&pid);//break;
                                printf("main process ID is: %d  child process ID is:%d  static address:%d\n",getpid(),aa,&aa);
                }
       
        }
        exit(EXIT_SUCCESS);
}
运行后输出为:
[fenstein@pmsvr01 code]$ gcc -o debug/edit Edit1.c
[fenstein@pmsvr01 code]$ ./debug/edit
ls
this is child pid is:10977 static address:134519028
debug    Edit1.c.bak  tcpclient.c  tcpsever.c  test02.c  test.c      texecl.c
Edit1.c  tcp.c        tcpserv.c    test01.c    test1.c   testfile.c  UDPsvr.c
main process ID is: 10976  child process ID is:0  static address:134519028
为什么在两个进程中aa的输出是不一样的呢?!!
如何才能获得一个进程的孙子进程的id?!!
发表于 2005-3-21 12:27:59 | 显示全部楼层
生成子进程时候,系统为子进程分配了一块父进程大小的空间并初始化,
所以父子进程的aa是不一样的,

获得子进程ID:
子进程中调用getpid()
父进程中在fork()的返回时候可以将子进程号码保存,返回值为子进程pid
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-22 20:34 , Processed in 0.041087 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表