Chinaunix首页 | 论坛 | 博客
  • 博客访问: 423661
  • 博文数量: 117
  • 博客积分: 5235
  • 博客等级: 大校
  • 技术积分: 1775
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-12 15:51
文章分类

全部博文(117)

文章存档

2012年(9)

2011年(2)

2010年(21)

2009年(13)

2008年(72)

我的朋友

分类: LINUX

2008-08-25 17:13:20

背景:
    看教程又有一点想法,很杂乱,放到这里吧.
 
正文:
 
1.两种结构
1.1
 

#include <unistd.h>;
#include <sys/types.h>;

main ()
{
        pid_t pid;
        pid=fork();

        if (pid < 0)
                printf("error in fork!");
        else if (pid == 0)
                printf("i am the child process, my process id is %d\n",getpid());
        else
                printf("i am the parent process, my process id is %d\n",getpid());
}

 

1.2

 

main (){
     pid_t pid;

     switch (pid = fork())
     {
     case -1:
         /* 这里pid为-1,fork函数失败 */
         /* 一些可能的原因是 */
         /* 进程数或虚拟内存用尽 */
         perror("The fork failed!");
         break;

     case 0:
         /* pid为0,子进程 */
         /* 这里,我们是孩子,要做什么? */
         /* ... */
         /* 但是做完后, 我们需要做类似下面: */
         _exit(0);

     default:
         /* pid大于0,为父进程得到的子进程号 */
         printf("Child's pid is %d\n",pid);
     }
    return 0;
}

 

2.两句话

fock关键要控制的是谁先返回

进程:很像是美国的家庭生活,fork即是孩子的成年礼,之前父母与孩子共同生活(有共同的过去,共同的现在,共同的未来),之后父母与孩子则各过过的生活(有共同的过去,不同的现在,不同的未来).
3.不是随便退出的

exit(status); 
_exit(status);  //区别在缓冲上.适用于绝大多数情况的基本规则是,‘exit()’在每一次进入‘main’函数后只调用一次。)
如何结束:生而必亡.生有先后,而亡未有.
4.脱胎换骨:
说是exec系统调用,实际上在Linux中,并不存在一个exec()的函数形式,exec指的是一组函数,一共有6个,分别是:
#include
int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg, ..., char *const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
其中只有execve是真正意义上的系统调用,其它都是在此基础上经过包装的库函数。

5.vfork荐言

vfork:按需索取,最好立即exec,然后退出.因为父进程会挂起.

阅读(654) | 评论(0) | 转发(0) |
0

上一篇:指针经典题目

下一篇:出现次数>x

给主人留下些什么吧!~~