linux vfork 进程的结果出现奇怪的问题

问题描述

linux vfork 进程的结果出现奇怪的问题
 #include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int globVar = 5;

int main (void)
{
    pid_t pid;
    int var = 1, i;

    printf("fork is different with vforkn ");
//  pid = fork();
    pid = vfork();
    switch(pid){
        case 0:
            i = 3;
            while(i-- > 0)
            {
                printf("child process is running!n");
                globVar++;
                var++;
            }
            printf("%d, %dn",globVar,var);
        break;
        case 1:
            perror("process creation failed!n");

        exit(0);
        default:
            i = 5;
            while(i-- > 0)
            {
                printf("parent process is runningn");
                globVar++;
                var++;
                sleep(1);
            }
            printf("%d, %dn",globVar,var);
            exit(0);
    }   

}

结果

[root@localhost labtwo]# ./diffork
fork is different with vfork
 child process is running!
child process is running!
child process is running!
8,      4
parent process is running
parent process is running
parent process is running
parent process is running
parent process is running
13,     11345274

最后的父进程var的值不应该是9吗怎么会是11345274 谁能帮忙解一下疑惑?谢谢了

解决方案

    T.T你们都不理我

解决方案二:

首先失败应该返回-1, 然后父进程的var应该是没有初始化

时间: 2024-08-04 05:49:03

linux vfork 进程的结果出现奇怪的问题的相关文章

linux内核 进程地址空间

问题描述 linux内核 进程地址空间 大神: 我是一个Linux内核菜鸟,在<<深入linux内核架构>>一书中写道:"各个进程的地址空间都是独立的", ,大神, 我不理解进程的"地址空间"是什么, 是进程的内存吗,请赐教,不胜感激涕零. 解决方案 进程启动后,都有一块自己的私人空间,其它进程 不可以直接访问的 .基本上所有操作系统都是这样的,这是最基本的安全性.这里所说的地址空间 就是一系列的内存地址罢了. 解决方案二: 内容是从<

Linux查看进程命令和具体操作

ps ax 命令显示一个当前系统进程的列表,该列表中包括其他用户拥有的进程.要显示进程以及它们的所有者,使用 ps aux 命令.该列表是一个静态列表:换一句话说,它是在你启用这项命令时正在运行的进程的快照.如果你需要Linux查看进程一个时刻更新的运行进程列表,使用下面描述的 top 命令. Linux查看进程ps 的输出会很长.要防止它快速从屏幕中滑过,你可以把它管道输出给 less 命令: ps aux | less 你可以使用 Linux查看进程ps 命令和 grep 命令的组合来查看某

Linux 用户进程内存空间详解

常使用top命令了解进程信息,其中包括内存方面的信息.命令top帮助文档是这么解释各个字段的. VIRT, Virtual Image (kb) RES, Resident size (kb) SHR, Shared Mem size (kb) %MEM, Memory usage(kb) SWAP, Swapped size (kb) CODE, Code size (kb) DATA, Data+Stack size (kb) nFLT, Page Fault count nDRT, Dir

linux kill进程和子进程小trick

我们的hive web是调用polestar restful service(https://github.com/lalaguozhe/polestar-1)来执行具体的hive或者shark语句的,这几天有用户说hive web上的kill按钮失效了,虽然已经显示停止了查询,但是其实提交到jobtracker的mapred job或者spark worker节点上作业还在running.我看了下,确实有这个问题. polestar对于每一条query执行的命令如下 sudo -u yukan

Linux中进程前后台切换相关命令

我们使用Linux时大多数是用shell命令行.一个命令窗口是无法直接执行多任务的.我们可以把某个任务先切到后台,再切别的任务到前台来操作.这个帖子整理一下这些常用的命令. 后台进程查看: jobs是用于后台进程查看的很方便的命令. jobs -l 可以显示出进程的pid. 注意一点:shell收到了SIGHUP信号后在退出前将SIGHUP转发给所有的作业(jobs).jobs由于收到SIGHUP而终止运行.(这取决于shell的) 将前台任务放到后台: 按下ctrl + z ,就将任务移到后台

linux 杀进程的脚本 有个命令不明白

问题描述 linux 杀进程的脚本 有个命令不明白 #!/bin/bashps -ef | grep woplus | awk '{if($8==""java"") print $2}' > ~~~1.pidwhile read linedo echo $line kill -15 $linedone < ~~~1.pidrm -f ~~~1.pid其中:ps -ef | grep woplus | awk '{if($8==""ja

virtualbox-kali linux虚拟机下字符间距很奇怪 要怎么改

问题描述 kali linux虚拟机下字符间距很奇怪 要怎么改 virtualbox虚拟机 kali linux 这个样子看着好难受啊!! 解决方案 字体的问题,换个字体看下.

linux上面进程自动关闭

问题描述 linux上面进程自动关闭 linux下面放了文件解析的进程,有一次数据文件格式出现了错误(路径下有正确格式的文件,也有错误格式的文件).碰到错误的数据文件的时候,进程会自动关闭,这是为什么?能不能设置为碰到错误格式的文件,自动跳过? 解决方案 进程异常了,处理错误文件格式的时候,程序加一些判断等,跳过 解决方案二: 查一下导致错误发生的信号,使用singal忽略此信号 解决方案三: 你要只要进程关闭的原因是什么呀?比如在解析文件格式的时候,段错误了,那肯定就是退出了.

Server Develop (七) Linux 守护进程

守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装入时启动,在系统关闭时终止.Linux系统有很多守护进程,大多数服务都是通过守护进程实现的. 守护进程的特点 由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭.但是守护进程却