【发布时间】:2020-10-13 05:49:53
【问题描述】:
C 提供标准函数system 来使用shell 运行子进程,许多语言也提供类似的函数,例如AWK、Perl(带有单个参数)和@ 987654324@。有时这些函数criticized 不适合一般使用,无论是在security grounds 上还是因为外壳不可移植或is not the one used interactively。
其他一些语言似乎也同意:它们只提供一种在没有 shell 的情况下运行进程的方法,例如 Java(它标记任何单个字符串参数本身)和 Tcl。 Python 提供了direct wrapper 和sophisticated replacement,可以避免使用shell 并明确推荐后者(如does the user community)。
当然,对于许多应用程序来说,shell 是不必要的复杂性;运行外部进程可能会带来deadlock、orphan processes、不明确的退出状态和file descriptor sharing 等问题,并且在运行mkdir 或echo $VAR 等情况下是不必要的。但是,假设 system 的存在是有原因的,什么时候它是合适的工具?
【问题讨论】: