• unix网络编程 关于进程


    1.fork()函数

    以下是一段非常有趣的代码,代码来源:http://www.cnblogs.com/bastard/archive/2012/08/31/2664896.html

    #include <unistd.h>  
    #include <stdio.h>   
    int main ()   
    {   
        pid_t fpid; //fpid表示fork函数返回的值  
        int count=0;  
        fpid=fork();   
        if (fpid < 0)   
            printf("error in fork!");   
        else if (fpid == 0) {  
            printf("i am the child process, my process id is %d/n",getpid());   
            printf("我是爹的儿子/n");//对某些人来说中文看着更直白。  
            count++;  
        }  
        else {  
            printf("i am the parent process, my process id is %d/n",getpid());   
            printf("我是孩子他爹/n");  
            count++;  
        }  
        printf("统计结果是: %d/n",count);  
        return 0;  
    }  

    运行代码之后,同时输出了父进程和子进程,而且两个进程的ID号也是不同的

    一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,并且系统会给新的进程分配资源

    fork()调用的奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:

    • 在父进程中,fork返回新创建子进程的进程ID
    • 在子进程中,fork返回0
    • 如果出现错误,fork返回一个负值

    fork函数执行完毕后,如果新进程创建成功,则出现两个进程,一个父进程,一个子进程,这两个进程是独立的

    我们可以通过pid_t数据类型返回的值来判断当前进程是子进程还是父进程

    我的理解:一个父进程经过fork生成一个子进程,这是一个过程;轮到第二个过程,之前的父进程经过fork函数之后生成一个子进程,第一个过程的子进程变成了第二个过程的父进程,经过fork之后也可以生成一个子进程。

    2.getpid()函数和getppid()

    getpid()

    功能:取得进程识别码

    返回值:目前进程的ID

    getppid()

    功能:取得父进程的进程识别码

    返回值:目前进程的父进程识别码

  • 相关阅读:
    ASP.NET——基础 14、Server
    ASP.NET——基础 15、HttpHandler
    ASP.NET——基础 2、ViewState
    MYSQL VS2010 中文乱码问题
    ASP.NET——基础 10、Web开发的一些基本原则1
    数据结构与算法 2、单向/双向链表
    C#操作XML日志
    web开发入门级学习经验(菜鸟级)
    笔记:键盘键值一览表(JS)
    笔记:JS事件的捕获与冒泡
  • 原文地址:https://www.cnblogs.com/181118ljh123/p/12002326.html
Copyright © 2020-2023  润新知