标准输出/错误是一个单独的进程文件? (Linux)的

时间:2013-10-08 17:47:09

标签: linux bash

我用来将标准错误转储到文件的代码如下所示:

    sudo COMMAND 2> FILENAME.txt

我希望能够通过获取其PID来杀死COMMAND进程,然后像这样使用KILL:

    sudo COMMAND 2> FILENAME.txt &
    PID=$!
    sudo kill $PID

我的问题是,我是在杀死“命令”进程还是我将“转储错误归档到文件”进程?

如果我正在查杀“转储错误到文件”进程,我该如何终止实际的命令进程?

3 个答案:

答案 0 :(得分:2)

将标准IO重定向到文件不是一个过程。您将终止sudo进程,但进程应在退出时关闭文件句柄。也就是说,重定向发生在sudo命令执行之前,因此如果您的用户帐户没有写FILENAME.txt的权限,那么在执行命令之前shell将会出错。

参考:https://unix.stackexchange.com/questions/1416/redirecting-stdout-to-a-file-you-dont-have-write-permission-on

答案 1 :(得分:2)

只有一个流程:sudo

  1. shell分叉一个新进程,一个shell的子进程。
  2. 将其标准错误重定向到文件。
  3. 命令sudo command在子进程中为exec()
  4. 父级将子进程的PID存储在$!
  5. sudo依次根据其配置设置权限,然后执行另一个exec()以将自己替换为command

答案 2 :(得分:0)

每个进程在启动时都会从其父进程继承某些内容。其中一个是一组打开的文件句柄(在POSIX中,这至少包括标准输入,标准输出和标准错误,但其他也是可能的)。重定向操作符只是修改传递给新进程的文件句柄。