linux c 关于vfork正确执行的问题

问题描述

linux c 关于vfork正确执行的问题

在编译下述代码的时候

如果已经宏定义了DEBUG
产生如下结果:

child : process id is 4287
child : parent process id is 4286

havent run strcpy -> buf:THIS IS parent process line
have run strcpy -> buf:parent : process line
parent : process id is 4286

如果没有宏定义DEBUG
产生如下结果:

child : process id is 4223
child : parent process id is 4222

havent run strcpy -> buf:child : process write
have run strcpy -> buf:parent : process line
parent : process id is 4222

point is : 为什么 “havent run strcpy ->” 所在行的显示会有不同 ?
编译环境:ubuntu 10.04.3, gcc
代码如下

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

#include <sys/stat.h>
#include <fcntl.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define DEBUG

char  buf[100];

int main(int argc, char **argv)
{
    int   fd;

#ifdef DEBUG
    pid_t pid = vfork();
#else
    pid_t pid = -1;
#endif

    if((fd = open("temp", O_CREAT | O_TRUNC | O_RDWR, S_IRWXU)) == -1)
    {
        perror("open file error !n");
        return 0;
    }

    strcpy(buf, "THIS IS parent process linen");

#ifdef DEBUG
    if(pid == 0)
#else
    if( (pid = vfork()) == 0)
#endif
    {
        strcpy(buf, "child : process writen");

        printf("n");
        printf("child : process id is %dn", getpid());
        printf("child : parent process id is %dnn", getppid());

        write(fd, buf, strlen(buf));
        close(fd);

        exit(0);    //child process must exit while work done
    }
    else
    {
        printf("havent run strcpy -> buf:%s", buf);
        strcpy(buf, "parent : process linen");
        printf("have   run strcpy -> buf:%s", buf);

        printf("parent : process id is %dn", getpid());
        write(fd, buf, strlen(buf));

        printf("n");
        close(fd);
    }
    return 0;
}
时间: 2024-10-29 13:51:33

linux c 关于vfork正确执行的问题的相关文章

运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行脚本的问题

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1676490 运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下cro

运维经验分享(六)-- 深究crontab不能正确执行Shell脚本的问题(二)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1677211 运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下cro

Linux下非交互式远程执行命令脚本

  Linux下非交互式远程执行命令脚本(比ssh更好的方式) openssh在每台机器上都有,ssh与scp经常出现在我们的生活中. 然而当要管理的机器规模越来越大时,ssh登陆到目标机器进行管理就变得不现实了. 虽然可以直接在ssh后面接命令的方式,进行命令的执行. 但是ssh的严格的权限认证使得我们不得不输入密码,或是建立信任关系,很难去自定义一个特定的认证方式. 基于ssh的这种不足.于是笔者就写了一个jetfire,这个工具.比ssh多的一个重要的功能就是可以自定义认证方式,顺便避免了

python文件读写操作与linux shell变量命令交互执行的方法_python

本文实例讲述了python文件读写操作与linux shell变量命令交互执行的方法.分享给大家供大家参考.具体如下: python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼. 代码如下: 复制代码 代码如下: #coding=utf-8 #!/usr/bin/python import os import time #python执行linux命令 os.system(':>./aa.py') #人机交互输入 S = raw_input("

IE9.0或者360下js(JavaScript、jQuery)不能正确执行(加载),按F12后执行正常;Firefox下ajax的success返回数据data(json、string)无法获取

兼容问题1: 页面的分享等插件加载不全,并无法点击. 兼容问题2: IE下页面选择器(#id..class.etc.)绑定click事件无法访问到,后台springmvc方法,也无法获取ajax的success方法返回值data. 兼容问题3: 在IE和Google下能够获取,ajax的success返回的数据data,但firefox下获取不到. 兼容问题4: 页面跳转,或url进入,js代码不能正确执行,如果按了F12后(开启F12),JavaScript(加载)事件可以正常响应,一切都正常

linux crontab每十秒执行怎么写

问题描述 linux crontab每十秒执行怎么写 如题,我按网上办法 * * * * sleep 10;wall hello * * * * sleep 20;wall hello * * * * sleep 30;wall hello * * * * sleep 40;wall hello * * * * sleep 50;wall hello 这样写之后,出现了N多进程 请问,该怎么写 解决方案 linux crontab 执行问题Linux crontab定时执行指令Linux cro

android-OnClickListener -正确执行

问题描述 OnClickListener -正确执行 执行下面的代码: public class MainActivity extends Activity implements OnClickListener { EditText centimeters = (EditText) findViewById(R.id.editCentimeters); EditText inches = (EditText) findViewById(R.id.editInches); Button btnCo

linux shell 脚本 代码的执行

问题描述 linux shell 脚本 代码的执行 1) if kill -0 cat $pid > /dev/null 2>&1; then 2) echo $command running as process 3) cat $pid.Stop it first. 4) exit 1 5) fi 求解1)是什么意思怎么执行, 不知道是 (1) tmp0 = cat $pid 其中的值,在执行 (2) tmp1=kill -0 tmp0 (3) tmp2=tmp1> /dev/

jsp-求助,下面的代码为什么不能正确执行。

问题描述 求助,下面的代码为什么不能正确执行. 为什么加入下面的代码控制台就报:严重: Servlet.service() for servlet jsp threw exception org.apache.jasper.JasperException: /search/app/searchtools/cognation_query.jsp(34,7) According to TLD or attribute directive in tag file, attribute list doe