我有一根烟斗。
int anotherPipe[2];
make(anotherPipe);
以下两个进程都可以访问此管道。
流程A:
close(anotherPipe[0]);
dup2(anotherPipe[1], 1); //redirect stdout to pipe
execl("/usr/bin/who", "usr/bin/who", NULL);
close(anotherPipe[1]); //this is never executed
流程B:
close(anotherPipe[1]);
read(anotherPipe[0], stringbuffer, bytestoread);
printf("%s\n", buffer);
printf("checkpoint\n");
close(anotherPipe[0]);
"谁" execl的命令输出通过管道重定向到进程B,在那里打印它。但是现在我的进程B没有终止,尽管打印了检查点。
不要终止'我的意思是终端中没有显示以下内容:
myusername@ubuntucomputer:~$
这里发生了什么以及如何解决?
编辑:解决了非终止进程B的问题。它终止了,但我的顶级进程在A和B之前完成,所以
myusername@ubuntucomputer:~$
早就打印了很多。我使用waitpid(),现在一切都很好。
答案 0 :(得分:3)
如果function checkCookie() {
var src=getCookie("src");
if (src!="") {
FIREuni:'TRUE'
var TrackObject = {
'CJ' : {
'CID': '12346',
'TYPE': '7865',
'OID': 'ORDERNUMBER',
'CURRENCY':'USD',
'DISCOUNT': '',
'COUPON': '',
PRODUCTLIST : [
{ 'ITEM': 'item.variant.sku',
'AMT': 'OTOTAL',
'QTY': 'OTY'
},
{ 'ITEM': 'item.variant.sku',
'AMT': 'OTOTAL',
'QTY': 'OTY'
}
]
}};
}
else
{
FIREuni:'FALSE'
var TrackObject ={
'UNI' : {
'CID': '',
'TYPE': '',
'OID': '',
'CURRENCY': '',
'DISCOUNT': '',
'COUPON': '',
PRODUCTLIST : [
{ 'ITEM': '',
'AMT': '',
'QTY': ''
}
]
}
};
}
}
成功,则原始程序中的任何内容都不会运行,因为它会将您要求运行的程序替换为该过程的内容。您需要在 execl()
之前关闭管道:
execl
另外,在致电close(anotherPipe[0]);
dup2(anotherPipe[1], 1); //redirect stdout to pipe
close(anotherPipe[1]);
execl("/usr/bin/who", "usr/bin/who", (char*)NULL);
时,请不要忘记NULL
至(char*)
。由于它是一个变量参数函数,它不会自动转换类型。