我用来将标准错误转储到文件的代码如下所示:
sudo COMMAND 2> FILENAME.txt
我希望能够通过获取它的 PID 然后像这样使用 KILL 来终止 COMMAND 进程:
sudo COMMAND 2> FILENAME.txt &
PID=$!
sudo kill $PID
我的问题是,我是在杀死“命令”进程还是在杀死“将错误转储到文件”进程?
如果我要终止“将错误转储到文件”进程,如何终止实际的命令进程?
只有一个过程:sudo
.
sudo command
。exec()
$!
.sudo
依次根据其配置设置权限,然后执行另一个exec()
以替换自身command
。
将标准 IO 重定向到文件不是一个过程。您将杀死该sudo
进程,但该进程应在退出时关闭文件句柄。也就是说,重定向发生在sudo
命令执行之前,因此如果您的用户帐户没有写入权限FILENAME.txt
,shell 将在执行命令之前出错。
每个进程在启动时都会从其父进程继承某些东西。其中之一是一组打开的文件句柄(在 POSIX 中,这至少包括标准输入、标准输出和标准错误,但其他的也是可能的)。重定向操作符只是简单地修改哪些文件句柄被传递给新进程。