我正在调用system("bash ../tools/bashScript \"This is an argument!\" &")
,然后我在close(socketFD)
返回后直接调用system
,当然我已经读过system
附加了&
的参数fork
将command
system
,command
会立即返回,我已经检查过了!
现在的问题是我不希望套接字在执行close
时保持连接,但最奇怪的是程序的工作流程仍在继续,command
有点看到并忽略了close
完成后close
生效了!
我试图在彼此之后两次调用socketFD
,以确保删除close
的每个副本(如果已创建),仍然是同一个问题,老实说我不知道为什么command
正在被调用,但在{{1}}(bash脚本)完成之前不会生效!
请指教!
答案 0 :(得分:2)
我对你正在做的事情感到有些困惑,但system
实际上是fork
的一个薄包装。这意味着两个进程都具有套接字描述符的副本*,并且只关闭一个“副本”。另一个持续存在,直到执行system
命令的分叉进程终止。
为什么不在拨打system
之前关闭套接字?
您还可以尝试在shutdown
'd描述符上使用dup
,例如:
shutdown(s,SHUT_RDWR);
* 关于通过fork
调用对文件和套接字描述符发生的事情的规则比“复制”更微妙,但这足以解释为什么它不适合你。