草庐IT

clone_flags

全部标签

C 中的 clone() 系统调用和共享

我正在尝试使用clone()系统调用来创建一个与父进程共享资源的线程。在书中我读到如果我使用以下标志,我将能够这样做:克隆虚拟机|克隆文件|克隆信号|CLONE_FS但变量似乎没有被共享。#include#include#include#include#include#defineSTACK_SIZE65536#defineBUFSIZE200intn=5;intChild(void*);intmain(){pid_tpid;char*stack;stack=malloc(STACK_SIZE);pid=clone(Child,stack+STACK_SIZE,CLONE_SIGHAN

linux - vm_flags 与 vm_page_prot

我正在使用linux内核2.6.38,并且对vm_area_struct的两个字段有疑问,vm_flags和vm_page_prot.如果我将私有(private)匿名内存映射为可读和可写,然后打印出创建的vm_area_struct的两个字段,我会看到vm_flags的低8位。是0x73和vm_page_prot的低8位是0x25。我正在运行x8632位,我的常量是VM_READ=0x01VM_WRITE=0x02VM_EXEC=0x04因此,看起来我的vm_flags表示内存是可读/写的,但vm_page_prot表示它只是可读的(可执行标志在x86上没有意义)。我的理解是vm_p

CLONE_VM undeclared(第一次在这个函数中使用)

我正在使用linuxc中的克隆功能。但是,当我尝试编译我的代码时遇到错误CLONE_VMundeclared(firstuseinthisfunction)。我去谷歌寻找解决方案,其中一个网站提到#include必须包含在代码中。我已经包含了#include在我的代码中,但编译错误仍然存​​在。有什么帮助吗?:)intc=clone(child,p+STACKSIZE-1,CLONE_VM|SIGCHLD,NULL); 最佳答案 将以下几行添加到代码的开头#define_GNU_SOURCE/*Seefeature_test_mac

linux - GDB 使用 clone() 调试应用程序

是否有GDB的GUI允许我调试使用clone()系统调用创建线程的应用程序?我尝试了Insight和KDBG,但由于某种原因,当创建新的克隆线程时,我在线程列表中看不到它。克隆系统调用通过内联汇编调用。是不是因为创建的线程和原来的进程共享PID?(虽然它有一个唯一的TID) 最佳答案 你试过吗:setfollow-fork-modechild我不使用gdbGUI。有时gdb-tui如果我觉得轻浮。 关于linux-GDB使用clone()调试应用程序,我们在StackOverflow上找

linux - 为什么取消共享(CLONE_NEWNET)需要 CAP_SYS_ADMIN?

我正在玩linux命名空间,我注意到如果用户想在新的网络命名空间中执行进程(不使用用户命名空间),他需要是root或拥有CAP_SYS_ADMIN能力。unshare(2)手册页说:CLONE_NEWNET(sinceLinux2.6.24)Thisflaghasthesameeffectastheclone(2)CLONE_NEWNETflag.Unsharethenetworknamespace,sothatthecallingprocessismovedintoanewnet‐worknamespacewhichisnotsharedwithanypreviouslyexisti

linux - clone()/fork()/进程创建在某些机器上很慢

在我的一些机器上创建新进程非常慢,而在其他机器上则不然。所有机器都很相似,一些速度较慢的机器在与一些速度较快的机器相同的硬件和内核(2.6.32-26,Ubuntu10.04)上运行完全相同的工作负载。不涉及进程创建的任务在所有机器上的速度相同。例如,此程序在受影响的机器上执行速度慢了约50倍:intmain(){inti;for(i=0;i什么可能导致任务创建速度变慢,我可以在机器中寻找哪些其他差异?编辑1:在这些机器上运行bash脚本(因为它们会生成大量子进程)也非常慢,慢速脚本上的strace显示clone()内核调用速度变慢。Edit2:vmstat在快机器和慢机器上没有显示任

linux - 'git clone' 遵循 umask,顶级项目目录除外

我想克隆一个git项目(比如来自github),并让顶层目录可以按组写入。我尝试了几种不同的方法。首先,在克隆之前设置umask。$umask0002我创建的文件然后可以按组写入$touchtest$ls-ltest-rw-rw-r--1usergroup02012-05-1709:32test现在我尝试gitclone$gitclonegit@github.com:user/repo.gitCloningintorepo...[succeeds]但克隆目录不可按组写入。$ls-ldrepodrwxr-xr-x11usergroup40962012-05-1709:32repo我在具有

linux - 如何在 Linux 上为 clone() 系统调用映射堆栈?

Linux上的clone()系统调用带有一个指向堆栈的参数,供新创建的线程使用。这样做的明显方法是简单地malloc一些空间并传递它,但是你必须确保你已经malloc了与该线程将使用的一样多的堆栈空间(很难预测)。我记得在使用pthreads时我不必这样做,所以我很好奇它做了什么。我遇到了thissite这解释说,“Linuxpthreads实现使用的最佳解决方案是使用mmap分配内存,并使用标志指定内存区域,该区域在使用时分配。这样,内存就按原样分配给堆栈需要,如果系统无法分配额外的内存,就会发生分段冲突。”我听说过使用mmap的唯一上下文是将文件映射到内存中,实际上阅读mmap手册

Linux - 了解挂载命名空间和克隆 CLONE_NEWNS 标志

我正在阅读mount&clone手册页。我想阐明CLONE_NEWNS如何影响子进程的文件系统View。(文件层次结构)让我们将此树视为目录层次结构。假设5和6是父进程中的挂载点。我在另一个question中阐明了挂载点.所以我的理解是:5和6是挂载点意味着mount命令之前用于在5和6处“挂载”文件系统(目录层次结构)(这意味着必须有目录5和6岁以下的树)。来自mount手册页:Amountnamespaceisthesetoffilesystemmountsthatarevisibletoaprocess.来自clone手册页:Everyprocesslivesinamountna

android - 需要 FLAG_ACTIVITY_NEW_TASK 澄清

所以我的问题是:我启动App1,打开Screen1,然后打开Screen2。我按Home,将App1留在后台。我打开App2,使用FLAG_ACTIVITY_NEW_TASK启动App1.Screen1,期望在之前左侧任务中位于App1.Screen2上。相反,我在App1.Screen1和系统调用onNewIntent()。当我按下它时,它再次带来了Sceen2和Screen1。我不使用任何其他Intent标志或启动模式。有人能解释一下发生了什么吗? 最佳答案 Android存在大量与Activity和任务相关的错误。尽管如此,谷