草庐IT

child_msg

全部标签

linux - 如果之后使用管道,为什么 wait 会生成 “<pid> is not a child of this shell” 错误?

在下文中,我创建了一个后台进程并等待它完成。$bash-c"sleep5|false"&wait$![1]46950[1]+Exit1bash-c"sleep5|false"$echo$?1这有效,提示在5秒后返回。但是,如果我在它之后再使用一个管道,wait会返回一个错误。$bash-c"sleep5|false"&wait$!|true[1]49493-bash:wait:pid49493isnotachildofthisshellhbaba@mbp-005063:~/misc$echo$?0hbaba@mbp-005063:~/misc$ps-T-fUIDPIDPPIDCSTIM

c - 从 child 到 parent 的信号丢失

我正在创建几个子进程,这些子进程向它们的父进程发送信号并终止。我只是数数。但我从来没有得到正确的计数。有些信号永远不会被处理程序捕获。我应该如何编码?#include#include#include#includeintended=0;voidhandler(intsig){ended++;}intmain(intargc,char**argv){inti;pid_tpid,ppid;if(signal(SIGUSR1,handler)0);printf("ended=%d\n",ended);return0;}这个程序的输出有时是47,其他的是39……但从来没有50

php - Apache 日志 : child pid xxxx exit signal Segmentation fault (11)

Apache+PHP+Mysql+Linux[notice]childpid23145exitsignalSegmentationfault(11),/tmp中可能存在核心转储但是在/tmp下没有找到如何找到错误? 最佳答案 PHP代码中函数的无限循环导致此错误。 关于php-Apache日志:childpidxxxxexitsignalSegmentationfault(11),我们在StackOverflow上找到一个类似的问题: https://stac

linux - POSIX 队列和 msg_max

我正在尝试使用POSIX队列,但遇到了一个问题。创建新队列时,我可以指定例如消息的大小以及队列中可以有多少条消息。我的正常限制是10,如/proc/sys/fs/mqueue/msg_max除了之外,在程序执行期间是否有一种简单的方法来更改它echonumber>/proc/sys/fs/mqueue/msg_max也许存在一些用于设置此类内容的系统调用。 最佳答案 没有。该限制是系统范围的限制;这就是它位于/proc/sys中的原因。如果你想改变它,你将不得不使用你已经展示过的echo命令。

c - 如何防止一个进程产生更多的 child

我正在为在我的大学LAN上进行类似ACM-ICPC比赛的在线评委工作。为此,我要求法官可能足够安全,以防止恶意程序在我的服务器上自行执行。(此类程序的一个示例是)intmain(){while(1)fork();}让我们调用这个程序的可执行文件测试代码。这个程序会导致我运行判断的服务器卡住。显然我不希望这种情况发生。所以为了防止我尝试使用ptrace。我想出了以下代码:(让我们调用这段代码的可执行文件monitor)#include#include#include#include#include#include#include#include#include#include#inclu

c -/proc/sys/kernel/sched_child_runs_first 工作吗?

我了解到在/proc/sys/kernel/sched_child_runs_first中设置一个非零值将强制子进程在父进程之前运行。但是,我认为它似乎没有用。这是我的代码:#include#includeintmain(intargc,char**argv){pid_tchild_pid;switch(child_pid=fork()){case0:printf("InChild\n");exit(0);case-1:printf("Couldnotfork()\n");default:printf("Inparent\n");}return0;}我得到的输出总是:InparentI

c - 如何从CHILD PROCESS中获取返回值?

程序计算从1到N..子进程计算偶数之和。父进程计算奇数之和。我想在父进程中获取子进程的返回值。我该怎么做#include#include#include#include#includeintmain(){intN;intid;intfd_result;;printf("EnterNtillwhichyouwantthesum:\n");scanf("%d",&N);if((fd_result=creat("result",600))==-1){perror("Errorcreatingfile");exit(1);}if((fd_result=open("result",O_TRUNC

c++ - 为什么我在 Linux 上看不到 SOCK_SEQPACKET 的 MSG_EOR?

我有两个进程通过使用socketpair()和SOCK_SEQPACKET创建的一对套接字进行通信。像这样:intipc_sockets[2];socketpair(PF_LOCAL,SOCK_SEQPACKET,0,ipc_sockets);据我了解,当收到SOCK_SEQPACKET记录时,我应该在“structmsghdr”的msg_flags成员中看到MSG_EOR。我在sendmsg()中设置MSG_EOR以确保该记录被标记为MSG_EOR,但在recvmsg()中接收时我没有看到它。我什至尝试在发送记录之前在msg_flags字段中设置MSG_EOR,但这根本没有任何区别。

c - 杀死 fork 的 child 会杀死 parent 吗?

我遇到了这种奇怪的行为,我有我的主程序和一个fork的child。它们像这样通过管道传输(数字是文件描述符):___parent___||____child_____|0stdin||||1pipe1[1]----------.|1stdout||2pipe2[1]----------.\|2stderr||____________|\`---------->3pipe1[0]|`---------->5pipe2[0]||______________|因此父级从stdin获取输入,但将stdout和stderr重定向到两个管道。child关闭了它的stdin并改为使用管道的读取端。然

linux - 等待子进程但出现错误 : 'pid is not a child of this shell'

我写了一个脚本从HDFS并行获取数据,然后我在一个for循环中等待这些子进程,但有时它返回“pid不是这个shell的子进程”。有时,它工作得很好。它很困惑。我使用“jobs-l”来显示在后台运行的所有作业。我确定这些pid是shell进程的子进程,并且我使用“psaux”来确保这些pid没有分配给其他进程。这是我的脚本。PID=()FILE=()letserial=0whilereadindex_tardoecho$index_tar|grepindex>/dev/null2>&1if[[$?-ne0]]thencontinuefisuffix=`printf'%03d'$seria