system()之后的close()奇怪的行为

时间:2013-05-13 20:36:43

标签: c sockets system

我正在调用system("bash ../tools/bashScript \"This is an argument!\" &"),然后我在close(socketFD)返回后直接调用system,当然我已经读过system附加了&的参数forkcommand systemcommand会立即返回,我已经检查过了!

现在的问题是我不希望套接字在执行close时保持连接,但最奇怪的是程序的工作流程仍在继续,command有点看到并忽略了close完成后close生效了!

我试图在彼此之后两次调用socketFD,以确保删除close的每个副本(如果已创建),仍然是同一个问题,老实说我不知道​​为什么command正在被调用,但在{{1}}(bash脚本)完成之前不会生效!

请指教!

1 个答案:

答案 0 :(得分:2)

我对你正在做的事情感到有些困惑,但system实际上是fork的一个薄包装。这意味着两个进程都具有套接字描述符的副本*,并且只关闭一个“副本”。另一个持续存在,直到执行system命令的分叉进程终止。

为什么不在拨打system之前关闭套接字?

您还可以尝试在shutdown'd描述符上使用dup,例如:

shutdown(s,SHUT_RDWR);

* 关于通过fork调用对文件和套接字描述符发生的事情的规则比“复制”更微妙,但这足以解释为什么它不适合你。