草庐IT

c++ - fork 并执行许多不同的进程,并从每个进程中获取结果

我已经设法从我的应用程序中派生并执行了一个不同的程序。我目前正在研究如何等待从exec调用的进程通过管道或标准输出返回结果。但是,我可以使用一个fork来拥有一组进程,还是我必须fork多次并再次调用同一个程序?我可以获得每个不同进程的PID吗?我希望我的应用程序调用我当前多次调用但具有不同参数的同一程序:我希望同一程序的一组8个进程运行并通过管道返回结果。有人可以给我指出正确的方向吗?我浏览了linux.die的手册页,但它们的描述相当简陋和晦涩。我可以找到电子书或pdf以获取详细信息吗?谢谢!pid_tpID=fork();if(pID==0){intproc=execl(BOLD

linux - 本地 IPC 的 POSIX 消息队列或 unix 域套接字

我需要在客户端和服务器之间设置本地IPC。是单服务器多客户端的情况,需要双向交换数据。客户端是发送命令选项的命令,服务器获取数据并将其发送给客户端。客户端在控制台上打印从服务器接收到的输出。命令发送的数据很小,但服务器发送给命令的数据很大(~11Mb)。Windows中的现有设计使用命名管道以65KB的block发送数据。服务器需要同时向多个命令客户端发送数据,因为从不同终端同时执行具有不同选项的命令是很常见的。我省略了FIFO,因为对于大小大于4096字节的消息,来自多个进程的数据可以交错。如果我错了,请纠正我。考虑到以下两个标准,POSIX消息队列或unix域套接字哪个更好?消息的

linux - 本地 IPC 的 POSIX 消息队列或 unix 域套接字

我需要在客户端和服务器之间设置本地IPC。是单服务器多客户端的情况,需要双向交换数据。客户端是发送命令选项的命令,服务器获取数据并将其发送给客户端。客户端在控制台上打印从服务器接收到的输出。命令发送的数据很小,但服务器发送给命令的数据很大(~11Mb)。Windows中的现有设计使用命名管道以65KB的block发送数据。服务器需要同时向多个命令客户端发送数据,因为从不同终端同时执行具有不同选项的命令是很常见的。我省略了FIFO,因为对于大小大于4096字节的消息,来自多个进程的数据可以交错。如果我错了,请纠正我。考虑到以下两个标准,POSIX消息队列或unix域套接字哪个更好?消息的

linux - POSIX 消息队列 - mq_send 线程唤醒顺序

有人可以向我解释消息队列如何处理多个唤醒线程阻塞在单个消息队列上?我的情况是我有多个作者阻塞了一条完整的消息队列,每个发布消息的优先级等于线程优先。我想确保他们醒来并按优先顺序发帖,然而,我的应用程序表现得好像它们以先进先出的顺序醒来(即他们阻止的顺序)。每个阻塞线程是使用具有不同优先级的SCHED_FIFO策略进行调度系统级范围。我在Internet上上下搜索了一些描述如何这应该可以工作,我能找到的只是描述它的POSIX手册页如果优先级调度是支持。由于内核调度程序是优先调度程序我会认为线程会按优先顺序唤醒并发布到队列,但是情况似乎并非如此。我确定我是只是缺少一些细微的细节,希望这里的

linux - POSIX 消息队列 - mq_send 线程唤醒顺序

有人可以向我解释消息队列如何处理多个唤醒线程阻塞在单个消息队列上?我的情况是我有多个作者阻塞了一条完整的消息队列,每个发布消息的优先级等于线程优先。我想确保他们醒来并按优先顺序发帖,然而,我的应用程序表现得好像它们以先进先出的顺序醒来(即他们阻止的顺序)。每个阻塞线程是使用具有不同优先级的SCHED_FIFO策略进行调度系统级范围。我在Internet上上下搜索了一些描述如何这应该可以工作,我能找到的只是描述它的POSIX手册页如果优先级调度是支持。由于内核调度程序是优先调度程序我会认为线程会按优先顺序唤醒并发布到队列,但是情况似乎并非如此。我确定我是只是缺少一些细微的细节,希望这里的

linux - 通过管道进行进程间通信

众所周知,在Linux的进程间通信中,进程之间通过一个名为“管道”的特殊文件进行通信。众所周知,对该文件执行的操作由一个进程写入并由一个进程读取以便相互通信。现在,问题是:Doesthesewriteandreadoperationsareparallelperformedduringthecommunication(operationsareexecutedparallely)?如果不是,当其中一个进程在通信过程中进入SLEEP状态时会发生什么?是先执行write操作让第二个进程read还是不执行任何write和直接进入休眠读取操作? 最佳答案

linux - 通过管道进行进程间通信

众所周知,在Linux的进程间通信中,进程之间通过一个名为“管道”的特殊文件进行通信。众所周知,对该文件执行的操作由一个进程写入并由一个进程读取以便相互通信。现在,问题是:Doesthesewriteandreadoperationsareparallelperformedduringthecommunication(operationsareexecutedparallely)?如果不是,当其中一个进程在通信过程中进入SLEEP状态时会发生什么?是先执行write操作让第二个进程read还是不执行任何write和直接进入休眠读取操作? 最佳答案

c - 在 shmdt() 之后和 shmctl(shmid, ipc_RMID, 0) 之前访问进程中的共享内存

假设我有一个指向先前分配的共享内存的指针*p。如果其中一个进程调用shmdt()来分离共享内存段,然后尝试分配一个值,例如:*p=0;在调用shmctl(shmid,IPC_RMID,0)进行销毁之前。这样做会不会报错?我无法理解是哪一个以及为什么。 最佳答案 是的,这是一个错误,很可能会导致段错误。当您调用shmget(2)分配共享内存段时,它不会立即放入进程的虚拟地址空间中的任何位置。也就是说,没有您可以写入的地址会将数据写入该段。shmat(2)的工作是将段放入(映射)到进程的地址空间中。(在SystemV共享内存的说法中,这

c - 在 shmdt() 之后和 shmctl(shmid, ipc_RMID, 0) 之前访问进程中的共享内存

假设我有一个指向先前分配的共享内存的指针*p。如果其中一个进程调用shmdt()来分离共享内存段,然后尝试分配一个值,例如:*p=0;在调用shmctl(shmid,IPC_RMID,0)进行销毁之前。这样做会不会报错?我无法理解是哪一个以及为什么。 最佳答案 是的,这是一个错误,很可能会导致段错误。当您调用shmget(2)分配共享内存段时,它不会立即放入进程的虚拟地址空间中的任何位置。也就是说,没有您可以写入的地址会将数据写入该段。shmat(2)的工作是将段放入(映射)到进程的地址空间中。(在SystemV共享内存的说法中,这

linux - IPC通知一个进程改变参数

我创建了一个将数据从源目录复制到目标目录的守护进程。我将其命名为cpd(复制守护进程)。它定期运行此cp命令:cpsrcdest但是如果我需要改变这个cp命令执行的间隔,我应该如何与cpd守护进程通信呢?例如:cpd-p120-->其中-p表示句点,120以秒为单位。PS:“我知道如何启动后台进程:创建一个子进程并退出父进程,设置新sessionID,关闭继承的标准文件描述符,更改工作目录。创建守护进程的标准步骤。我还使用syslog在执行每个命令后记录状态消息。”Referencefordaemoncreation@保罗:所以我需要一个像下面这样的配置文件。当我在没有-d选项的情况下