所以我使用 exec 打开 shell 并为我运行 shell 命令,这是:
exec('删除文件名并退出')
使用 exit 关闭 Shell
我必须在一次运行中多次使用这个exec,我无法找到子进程退出并关闭CMD后会发生什么,命令完成后子进程是否会自行关闭或者我是否必须显式关闭子进程
图中没有子进程。
根据 linux 手册页,
有时会看到 execve() (以及描述的相关函数 在 exec(3)) 中被描述为“执行一个新进程”(或类似的)。 这是一个极具误导性的描述: 没有新流程; 调用进程的许多属性保持不变(在 特别是它的 PID)。 execve() 所做的只是安排一个 现有进程(调用进程)来执行新程序。
相反,
exec()
函数系列会用新的过程映像替换当前过程映像。 参见:手册页
回答你的问题:
命令完成后子进程是否会自行关闭,还是我必须显式关闭子进程
我假设,在解决过程之后,原始过程图像被恢复。根据
exec
调用的结果,原始进程收到 0 表示成功,-1 表示错误,并根据手册页正确设置 errno
。
有关过程映像替换期间保持不变的内容的更多详细信息,请参阅 execve
手册页中的
对过程属性的影响部分。