fork

 1 #include <unistd.h>
 2 #include <stdlib.h>
 3 #include <stdio.h>
 4 #include <fcntl.h>
 5 #include <error.h>
 6 #include <errno.h>
 7 int glob = 6;
 8 char buf[] = "a write to stdout\n";
 9
10 int main (int argc, char **argv)
11 {
12     int var;
13     pid_t pid;
14     var = 88;
15     if (write(STDOUT_FILENO, buf, sizeof(buf)-1) != sizeof(buf)-1) {
16         perror("write");
17     }
18
19     if ((pid = fork()) < 0) {
20         perror("fork");
21     } else if(pid == 0){
22         glob++;
23         var++;
24         //printf("child: glob:%d var:%d\n",glob, var);
25     }else {
26         sleep(2);
27     }
28
29     printf("pid:%d,which parent id:%d\n",getpid(), getppid());
30     printf("pid:%d glob:%d var:%d\n",getpid() ,glob, var);
31     return 0;
32 }

fork once call, twice return

output:

a write to stdout
pid:23354,which parent id:23320
pid:23354 glob:7 var:89
pid:23320,which parent id:23317
pid:23320 glob:6 var:88

时间: 2024-10-10 00:45:20

fork的相关文章

linux中fork()函数详解

 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事.    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. 我们来看一个例子: [cpp] view plain copy /* *  f

【转】如何在github上fork一个项目来贡献代码以及同步原作者的修改 -- 不错

原文网址:http://www.cnblogs.com/astwish/articles/3548844.html 作为一个IT人,通过github进行学习是最快的成长手段.我们可以浏览别人的优秀代码.但只看不动手还是成长得很慢,因此为别人贡献代码才是明智之举.比如我们看下片看,许多大片都是由字幕组免费翻译压制的.为什么他们要这样做呢?因为他们都是聪明的大学生,为了提高听力水平,提高笔译水平才这样干的!中国人都是非常实务的!因此贡献代码,参与开源项目都是有益无害的!好了,让我们开始吧! 如何贡献

fork炸弹

:(){ :|:& };:                         # 著名的 fork炸弹,系统执行海量的进程,直到系统僵死 fork炸弹(fork bomb)在计算机领域中是一种利用系统调用fork(或其他等效的方式)进行的拒绝服务攻击.与病毒与蠕虫不同的是,fork炸弹没有传染性,而且fork炸弹会使对同时执行进程/程序数设限的系统无法执行新程序,对于不设限的系统则使之停止响应.以fork炸弹为代表的自我复制程序有时亦被称为wabbit. fork炸弹的概念:进程递归式派生(for

Linux Fork Bomb

众所周知,bash是一款极其强大的shell,提供了强大的交互与编程功能.这样的一款shell中自然不会缺少"函数"这个元素来帮助程序进行 模块化的高效开发与管理.于是产生了由于其特殊的特性,bash拥有了fork炸弹.Jaromil在2002年设计了最为精简的一个fork炸弹的实 现. 所谓fork炸弹是一种恶意程序,它的内部是一个不断在fork进程的无限循环,fork炸弹并不需要有特别的权限即可对系统造成破坏.fork炸 弹实质是一个简单的递归程序.由于程序是递归的,如果没有任何限

线程基础:多任务处理(13)——Fork/Join框架(解决排序问题)

============== 接上文< 线程基础:多任务处理(12)--Fork/Join框架(基本使用)> 3. 使用Fork/Join解决实际问题 之前文章讲解Fork/Join框架的基本使用时,所举的的例子是使用Fork/Join框架完成1-1000的整数累加.这个示例如果只是演示Fork/Join框架的使用,那还行,但这种例子和实际工作中所面对的问题还有一定差距.本篇文章我们使用Fork/Join框架解决一个实际问题,就是高效排序的问题. 3-1. 使用归并算法解决排序问题 排序问题是

fork的相关问题

缓冲分为:无缓冲(直接输出)  行缓冲(遇'\n'输出或fflush)   全缓冲(fflush) 下面的程序一共输出多少个"-"?() #include <stdio.h>   #include <sys/types.h>   #include <unistd.h>       int main(void)   {      inti;      for(i=0; i<2; i++){         fork();         prin

-bash: fork: retry: 没有子进程

今天遇到一个问题 -bash: fork: retry: 没有子进程 解决方法 设置各linux 用户的最大进程数,下面我把某linux用户的最大进程数设为10000个: ulimit -u 10000

Linux fork操作之后发生了什么?

今天我在阅读<Unix网络编程>时候遇到一个问题:accept返回时的connfd,是父子进程之间共享的?我当时很不理解,难道打开的文件描述符不是应该在父子进程间相互独立的吗?为什么是共享的呢?fork之后父子进程之间共享了什么?堆上的变量是否也共享了呢? 做了如下的代码测试,在fork之前先创建一个文件,在子进程中写入字符串“shenlei”,父进程读取文件内容,发现是“shenlei”.说明打开的文件描述符在父子进程之间是共享的. 看来在<Unix网络编程>中说的是对的,当cl

php 快速fork出指定个子进程

转:php 快速fork出指定个子进程 $pids = array(); $child_pid = pcntl_fork(); if ($child_pid == -1) { throw new Exception( __METHOD__ . "|" . __LINE__ . ": fork() error"); } else if ($child_pid) { //parent exit(0); } else { //child for($i=0;$i<3;

fork 系统调用的执行过程与调试

我们可以通过fork系统调用来处理进程创建的任务.对于进程的创建, 可以sys_clone, sys_vfork,以及sys_fork. 这些系统调用的内部都使用了do_fork.函数. 对于do_fork函数, 会copy tast_struct, 设置内核堆栈, 并且对一些特定的数据结构进行修改.其中里面还有copy_thread 函数, 会设置这个进程的cs和ip.这个是在进程的thread_info中保持的.这里的ip设置成了ret_from_fork函数(在ret_from_frok里