在Linux的许多程序和手册页中,我看过代码使用fork().我们为什么需要使用fork()它的目的是什么?
我尝试在我的计算机上安装英特尔MPI基准测试,我收到此错误:
fork: retry: Resource temporarily unavailable
Run Code Online (Sandbox Code Playgroud)
然后,当我跑步ls和top命令时,我再次收到此错误.
导致此错误的原因是什么?
配置我的机器:
Dell precision T7500
Scientific Linux release 6.2 (Carbon)
Run Code Online (Sandbox Code Playgroud) 为什么这个程序打印"分叉!"4次?
#include <stdio.h>
#include <unistd.h>
int main(void) {
fork() && (fork() || fork());
printf("forked!\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我分叉了一个项目,进行了一些更改,并接受了拉取请求.但是现在,我分叉的项目移动到另一个存储库,并且是该存储库的一个分支.
那是:
Original -> MyFork
Run Code Online (Sandbox Code Playgroud)
现在:
NewOriginal -> Original -> MyFork
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到以下内容?
NewOriginal -> MyFork
Run Code Online (Sandbox Code Playgroud) system和exec家庭命令有什么区别?特别是我想知道哪一个创建子进程工作?
操作系统:Linux,语言:纯C
我正在学习一般的C编程,以及在特殊情况下在UNIX下进行C编程.
printf()在使用fork()呼叫后,我发现了一个奇怪的(对我来说)函数的行为.
码
#include <stdio.h>
#include <system.h>
int main()
{
int pid;
printf( "Hello, my pid is %d", getpid() );
pid = fork();
if( pid == 0 )
{
printf( "\nI was forked! :D" );
sleep( 3 );
}
else
{
waitpid( pid, NULL, 0 );
printf( "\n%d was forked!", pid );
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
产量
Hello, my pid is 1111
I was forked! :DHello, my pid is 1111
2222 was forked!
Run Code Online (Sandbox Code Playgroud)
为什么第二个"Hello"字符串出现在子输出中?
是的,这正是父母在开始时与父母一起打印的内容pid …
我一直试图了解fork()行为.这一次在for-loop.请注意以下代码:
#include <stdio.h>
void main()
{
int i;
for (i=0;i<3;i++)
{
fork();
// This printf statement is for debugging purposes
// getppid(): gets the parent process-id
// getpid(): get child process-id
printf("[%d] [%d] i=%d\n", getppid(), getpid(), i);
}
printf("[%d] [%d] hi\n", getppid(), getpid());
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
[6909][6936] i=0
[6909][6936] i=1
[6936][6938] i=1
[6909][6936] i=2
[6909][6936] hi
[6936][6938] i=2
[6936][6938] hi
[6938][6940] i=2
[6938][6940] hi
[1][6937] i=0
[1][6939] i=2
[1][6939] hi
[1][6937] i=1
[6937][6941] i=1
[1][6937] i=2
[1][6937] …Run Code Online (Sandbox Code Playgroud) 如何让PHP 5.2(作为apache mod_php运行)向客户端发送完整的HTTP响应,然后继续执行操作一分钟?
长篇故事:
我有一个PHP脚本,必须执行一些长数据库请求并发送电子邮件,运行需要45到60秒.该脚本由我无法控制的应用程序调用.我需要应用程序报告从PHP脚本收到的任何错误消息(主要是无效的参数错误).
应用程序的超时延迟小于45秒(我不知道确切的值)因此将PHP脚本的每次执行都注册为错误.因此,我需要PHP尽可能快地将完整的HTTP响应发送到客户端(理想情况下,只要输入参数已经过验证),然后运行数据库和电子邮件处理.
我正在运行mod_php,所以pcntl_fork不可用.我可以通过将要处理的数据保存到数据库并运行实际过程来解决这个问题cron,但我正在寻找一个更短的解决方案.
我之前在我的应用程序中使用过线程并且很好地了解它的概念,但是最近在我的操作系统讲座中我遇到了fork().这与线程类似.
我谷歌搜索他们之间的差异,我开始知道:
但是,我脑子里还有一些问题.
我在这种情况下发现自己两次:我在我的系统上安装了一个gem并开始在我的Rails项目中使用它.最终我需要对该gem进行一些更改.我该怎么办?
理想情况下,我想查看某个地方的宝石的源代码,比如〜/ third_party/gems,对它进行处理并让我的Rails项目使用它.那可能吗?
在所有情况下,宝石都在github,所以我可能会在github,克隆它,抓住机会并维护我自己的分支.我想我会在我的服务器上直接安装gem分支.那有意义吗?