Articles of 进程

read()系统调用会执行数据的副本,而不是传递引用

read()系统调用会导致内核复制数据,而不是通过引用传递缓冲区。 在接受采访时我被问到了这个原因。 我能想到的最好的是: 避免跨多个进程同时写入同一缓冲区。 如果用户级进程尝试访问映射到内核虚拟内存区域的缓冲区,则会导致段错误。 事实certificate,面试官对这两个答案都不满意。 如果有人能详细说明上述情况,我将不胜感激。

Ruby杀死使用PTY.spawn打开的虚拟shell

在ruby脚本中,我启动了更多的虚拟shell,每个都由shellpipe理器对象pipe理,如下所示: @shell = PTY.spawn 'env PS1="\w>" TERM=dumb COLUMNS=63 LINES=21 sh -i' 在稍后的某个时间点,我想销毁这个实例,并杀死关联的shell进程。 可悲的是,我无法正常工作。 这是我尝试的,按照工作的概率顺序: 没有任何东西,也就是说,当pipe理对象被销毁时,期望shell proc会被closures。 使用kill命令杀死在shell上运行的所有进程(这是可行的),然后用system("kill #{@shell[2]")杀死shell本身。 这没有效果。 在上面使用-9。 这使得shell进程不存在。 当ruby程序退出时,所有的shell都会closures,但是我想在程序运行的时候杀掉它们。 任何人都遇到过这样的事情?

我怎样才能将更多的值写入pipe道并读取它们?

我在linux下用c ++编写一个程序,其中一个subprocess应该在pipe道中写入两个长的值,父进程应该读取它们。 到目前为止,我在onlz中设置了两个(命名)pipe道,并通过写入(fd1,&value1,sizeof(long))写入每个pipe道,并通过读取(fd1,&value1,sizeof(long))读取它。 只是一个pipe道都会更好,但我不知道如何做到这一点。 我试过了: write(fd1,&value1,sizeof(long)); write(fd1,&value2,sizeof(long)); 和两个读取,但这似乎导致进程阻塞和彼此等待。 如果有人能给我一个提示,我会很高兴,如何实现这一点。 可能的解决scheme:我写了一个数组中的所有值(因为我知道有多less),那么我只需要一个线/读通话。

为什么不能直接与对方进行沟通?

我的意思是不要使用ipc方法,比如pipe道,共享内存。进程A直接访问进程B.

信号/暂停死锁

我很难通过信号和共享内存来pipe理subprocess(我知道pipe道可能会更好)。 我有以下循环: * parent processing something, then signaling the children and going into pause, * children processing something, then signaling the parent and going into pause, * etc. etc. 问题是,在发信号通过父(通过kill)之后的某个时候,操作系统切换到父母而不让孩子暂停()。 当它恢复孩子(在家长调用暂停后)孩子然后暂停,我有一个死锁:(。 有什么build议么?

我怎样才能得到我的程序的内存消耗高峰?

我有一个小程序,就像grep或cat在运行时分配内存一样。 我想知道在整个运行过程中最多分配了多less内存。 我怎么能这样做?

如何区分服务器发送的两个不同的SIGUSR2信号?

我的服务器需要支持多个客户端,暂时让我们假设我们正在处理2客户端。 这是服务器: #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <sys/ipc.h> #include <sys/shm.h> #include <fcntl.h> #include <sys/types.h> #include <unistd.h> #include <sys/fcntl.h> #include <sys/stat.h> #define FIFONAME "fifo_clientTOserver" #define SHM_SIZE 1024 /* make it a 1K shared memory segment */ #define ROWS 10 #define COLS 10 void error(char* str) { perror(str); exit(1); } int […]

在PHP中设置CPU亲和力?

非常简单的问题 – 有没有办法通过PHP设置CPU亲和力? 以下任何一项都可以做到: 通过PHP调用设置当前进程的亲和力。 通过PHP调用设置特定PID的亲和力。 作为最后的手段,通过命令行工具设置特定PID的关联性。 到目前为止,我发现的唯一select是最后一个,使用一个名为schedutils的工具,似乎它只能在更新的内核上受支持。 Schedutils

当在UNIX中执行“jobs”命令时,+和 – 符号表示什么?

当我在CUI中运行作业命令来检查作业。 我会得到如下结果。 [4]- Stopped Passwd. [5]+ Stopped Cat > d1. 我没有得到,为什么+和-被使用? 任何人都可以解释一下吗?

父进程重启时如何让subprocess死掉

守护进程X产生进程Y. 有时守护进程X可能会突然死掉,在这种情况下,它没有机会正确地终止它的subprocessY (也就是说,进程Y将继续在后台运行)。 如何确保当X突然死亡时Y总是被终止? 目前我已经以这样的方式实现了守护进程X ,如果它突然死了,然后重新启动; 读取进程' Y pid文件并使用kill(pid, SIGTERM)终止Y. 然而,这个解决scheme有其缺点 – 在杀死进程Y之前,我需要确保它的确是进程Y (因为其他一些更新的进程可以重复使用与Y的pid文件相同的进程)。 甚至,如果X检查处理' Y的名字反对/proc/<pid>/ ,那么仍然有一个小窗口,理论上X可以杀死错误的进程。 由于进程Y不是由我开发的,我不能使用Y的 prctl(PR_SET_PDEATHSIG, SIGTERM) 。 而且, system("killall Y")对于我的用例来说太宽泛了。 有没有比我目前有更好的方法来解决这个问题?