当前位置:首页 » 编程语言 » c语言中fork
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言中fork

发布时间: 2022-06-24 09:09:27

㈠ 关于c语言fork函数的运行结果求生成结果的详细过程

看起来你这段程序很难结束了。
首先父进程会创建4个子进程;
然后,因为父子进程共用代码段,于是子进程也会把for循环执行4次,每个子进程继续4个子进程;
最后,子进程创建的子进程,依然会继续创建4个子进程,所以,没完没了。

因fork会返回2个值,返回非零,是创建的子进程号,此时在父进程中;返回零是在子进程中;

所以,一般来说:应该根据fork的返回值来使代码选择不同的执行路径,简单举例:
if (fork() !=0 )
{
parent process do something
}
else
{
child process do something
}

㈡ C语言中怎么用fork()创建子进程运行程序并且计算时间

1、fork一般用于处理多线程任务。比如在网络中,需要同时发送多种请求报文,则可以fork出子进程来进行发包任务,而父进程则直接去做自己的逻辑任务。
2、所谓运行时间指的是已经运行了多长时间还是从进程创建到进程退出的时间?输入的程序是由程序启动还是已经在运行的
,如果是已经存在的,就试着去获取进程创建时间(WIN32
提供这样的API),然后获取当前时间,就可以得到进程已经运行了多久。如果是程序启动的,那就用类似time这种函数打桩就可以了。

㈢ c语言中用fork()和excel()实现控制台的指令

#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>

#define BUFFERSIZE 40

int main()
{
char request,ch;
char leftover[BUFFERSIZE];
int pid, status;

printf("Please Enter Command:\n");
scanf("%c", &request);
ch = getchar();
while(request != 'Q')
{
fgets(leftover, sizeof(leftover), stdin);
pid = fork();
if(pid > 0)
{
wait(&status);
printf("Please Enter Command:\n");
scanf("%c", &request);
ch = getchar();
}
else if (pid == 0)
{
if (execl("/bin/sh", "sh", "-c",leftover,(char *)0) == -1)
{
printf("%s",strerror(errno));
exit(-1);
}
exit(-1);
}
else
exit(-1);
}
printf("GoodBye!\n");
return 0;
}
在linux下vi编辑器下编写代码,gcc编译运行测试过,希望对你有帮助。上面的编程主要是利用了进程编程的一些知识,推荐看看《Unix环境高级编程》(APUE),相信会对编程有很大的提高,大家共同进步。

㈣ C语言中的fork和pipe的问题

fork -----> fork -----> fork

加入进程A fork出了进程B,然后进程B又fork出了进程C,进程C又fork出了进程D
pipe是管道,只有一个入口,一个出口。可以把入口和出口分别放到父子进程中。
父进程负责读,子进程负责写。或者子进程读,父进程写。
你的例子里,在进程A里创建管道PipeA,然后fork出进程B。进程AB之间使用PipeA通信。
进程B再创建PipeB,然后进程BC之间使用PipeB通信。
进程C再创建PipeC,然后进程CD之间使用PipeC通信。
如果想把进程A的数据传递给进程D,那么应该:进程A向PipeA写入数据,进程B从PipeA中读取数据,然后再写入PipeB,进程C从PipeB中读取数据,然后再写入PipeC,进程D从PipeC中读取数据

㈤ fork函数是什么

C语言里面,fork函数是用来创建子进程的

㈥ 关于c语言中fork()和execv()的问题

fork----->fork----->fork加入进程Afork出了进程B,然后进程B又fork出了进程C,进程C又fork出了进程Dpipe是管道,只有一个入口,一个出口。可以把入口和出口分别放到父子进程中。父进程负责读,子进程负责写。或者子进程读,父进程写。你的例子里,在进程A里创建管道PipeA,然后fork出进程B。进程AB之间使用PipeA通信。进程B再创建PipeB,然后进程BC之间使用PipeB通信。进程C再创建PipeC,然后进程CD之间使用PipeC通信。如果想把进程A的数据传递给进程D,那么应该:进程A向PipeA写入数据,进程B从PipeA中读取数据,然后再写入PipeB,进程C从PipeB中读取数据,然后再写入PipeC,进程D从PipeC中读取数据

㈦ c语言调用函数while((p1=fork())==-1)是什么意思

fork函数是在当前进程中新建立一个子进程,如果这个创建子进程失败,那么返回-1,这个实际是把创建进程的返回值和-1比较看看是否创建失败。
因为是写在while语句里,那么当创建失败之后,如果在while里面没有break或者跳出,当while执行体执行结束后又会执行(p1=fork())==-1,等于不断重复创建子进程一直到创建成功为止。
注意这里会返回两次,因为父进程创建子进程的时候复制了父进程的地址空间,那么父子进程地址空间的语句执行都在等待fork返回的那句话里。
所以返回两次是父进程返回一个,返回的是子进程的ID,子进程返回一次,返回的是0.
那么我们根据不同的返回值就可以分别写出我们想要的父子进程的逻辑。
#include
#include
#include
int
main()
{
int
p
=
-1;
while
(
(p
=
fork())
==
-1
)
{
std::cout
<<
"create
process
failed!"
<<
std::endl;
}
if
(p
==
0)
{
std::cout
<<
"this
is
in
the
child
process!"
<<
std::endl;
}
esle
{
std::cout
<<
"this
is
in
the
father
process!"
<<
std::endl;
}
}

㈧ C语言 fork()相关问题

多个进程的执行顺序是不确定的。
pid是系统分配的进程号,每次运行系统分配的是不一样的

㈨ 有没有人知道,为什么在jni的c语言代码里fork子线程不成功

1、fork一般用于处理多线程任务。比如在网络中,需要同时发送多种请求报文,则可以fork出子进程来进行发包任务,而父进程则直接去做自己的逻辑任务。

2、所谓运行时间指的是已经运行了多长时间还是从进程创建到进程退出的时间?输入的程序是由程序启动还是已经在运行的 ,如果是已经存在的,就试着去获取进程创建时间(WIN32 提供这样的API),然后获取当前时间,就可以得到进程已经运行了多久。如果是程序启动的,那就用类似time这种函数打桩就可以了。