标签: fork

redis bgsave失败,因为fork无法分配内存

all:这是我的服务器内存信息'free -m'

              total       used       free     shared    buffers     cached
 Mem:         64433       49259      15174          0          3         31
 -/+ buffers/cache:      49224      15209
 Swap:         8197        184       8012
Run Code Online (Sandbox Code Playgroud)

我的redis-server使用了46G内存,剩下几乎15G的内存空闲

据我所知,fork是写入时的副本,当有15G可用内存时它不应该失败,这足以malloc必要的内核结构.

此外,当redis-server使用42G内存时,bgsave还可以,fork也可以.

是否有任何vm参数我可以调整以使fork返回成功?

谢谢.

fork linux-kernel redis

46
推荐指数
3
解决办法
2万
查看次数

如何退出子进程 - _exit()与exit

请考虑以下代码段:

pid_t cpid = fork();

if (cpid == -1) {
    perror("fork");
    exit(EXIT_FAILURE);
}

if (cpid == 0) { // in child
    execvp(argv[1], argv + 1);
    perror("execvp");
    _exit(EXIT_FAILURE);
}

// in parent
Run Code Online (Sandbox Code Playgroud)

如果execvp返回,我该如何退出子进程?我应该使用exit()或_exit()吗?

c fork process

44
推荐指数
2
解决办法
5万
查看次数

仅使用本地存储库历史记录的子集创建GitHub存储库

背景:我正在接近开放采购我已经工作了两年多的个人研究代码.它起初是一个SVN存储库,但大约一年前我转移到Git,我想在GitHub上分享代码.然而,多年来它累积了很多,我宁愿公共版本以其现状开始.但是,我仍然愿意为此做出贡献并融入其他人的潜在贡献.

问题是:有没有办法"分叉"一个git存储库,这样就不会在fork(它存在于GitHub上)上保留历史记录,但是我的本地存储库仍然有完整的历史记录,我可以拉/推送到GitHub?

我对大型存储库的管理端没有任何经验,所以非常感谢细节.

git fork github

44
推荐指数
1
解决办法
7159
查看次数

将子进程作为不同用户从长时间运行的Python进程运行

我有一个长期运行的,守护进程的Python进程,它使用子进程在发生某些事件时生成新的子进程.长时间运行的进程由具有超级用户权限的用户启动.我需要它生成的子进程作为不同的用户(例如,"nobody")运行,同时保留父进程的超级用户权限.

我正在使用

su -m nobody -c <program to execute as a child>
Run Code Online (Sandbox Code Playgroud)

但这似乎是重量级的,并不会非常干净地死去.

有没有办法以编程方式完成此操作而不是使用su?我正在查看os.set*uid方法,但Python std lib中的doc在该领域非常稀少.

python fork subprocess setuid

43
推荐指数
3
解决办法
4万
查看次数

时间浪费execv()和fork()

目前我正在学习fork(),并execv()和我有关于组合的效率问题.

我看到了以下标准代码:

pid = fork();
if(pid < 0){
    //handle fork error
}
else if (pid == 0){
    execv("son_prog", argv_son);
//do father code
Run Code Online (Sandbox Code Playgroud)

我知道fork()克隆整个过程(复制整个堆等)并execv()用新程序替换当前地址空间.考虑到这一点,使用这种组合不是非常低效吗?我们正在复制进程的整个地址空间,然后立即覆盖它.

所以我的问题是:
即使我们有浪费,使用这个组合(而不是其他解决方案)使人们仍然使用它的优势是什么?

unix linux operating-system fork multiprocessing

43
推荐指数
3
解决办法
2836
查看次数

从一个线程中分叉是否安全?

让我解释一下:我已经在Linux上开发了一个应用程序,它分叉并执行外部二进制文件并等待它完成.结果由fork +进程独有的shm文件传递.整个代码封装在一个类中.

现在我正在考虑线程化这个过程以加快速度.拥有许多不同的类函数实例,并行地(使用不同的参数)分叉和执行二进制文件,并使用自己独特的shm文件传递结果.

这个线程安全吗?如果我在一个线程中分叉,除了安全之外,还有什么我需要注意的吗?任何建议或帮助非常感谢!

c++ linux multithreading fork process

41
推荐指数
6
解决办法
2万
查看次数

如何让父母等待所有子进程完成?

我希望有人可以解释如何让父母等待所有子进程完成后再继续fork之后.我有清理代码,我想运行,但子进程需要返回才能发生这种情况.

for (int id=0; id<n; id++) {
  if (fork()==0) {
    // Child
    exit(0);      
  } else {
    // Parent
    ...
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

c operating-system posix fork process

41
推荐指数
4
解决办法
13万
查看次数

将exec输出重定向到缓冲区或文件

我正在写一个C程序中我fork(),exec()wait().我想把我执行的程序的输出写入文件或缓冲区.

例如,如果我exec ls 我想写入file1 file2 etc缓冲区/文件.我认为没有办法读取标准输出,所以这是否意味着我必须使用管道?这里有一个我无法找到的一般程序吗?

c fork exec

40
推荐指数
2
解决办法
9万
查看次数

分叉后,全局变量是否共享?

考虑这个简单的代码:

 int myvar = 0;
 int main() {
     if (fork()>0) {
       myvar++;
     } else {
       // father do nothing
     }
 }
Run Code Online (Sandbox Code Playgroud)

当孩子增加myvar时,值是否与父亲共享(如pthread)?

c unix linux fork

40
推荐指数
4
解决办法
4万
查看次数

使用fork()创建的子进程是否会在父级被杀死时自动终止?

我正在使用fork()C/C++ 创建子进程.
当父进程结束(或由于某种原因被杀死)时,我也想要杀死所有子进程.
这是由系统自动完成的吗?或者我必须自己做?

谢谢.


预先存在的类似问题:

c++ linux fork process parent-child

37
推荐指数
1
解决办法
4万
查看次数