擅长:python、mysql、java
<p>对于更简单的用例(例如开发测试),使用<code>strace</code>(linux)或<code>dtruss</code>(OSX)。当然,这在特权进程中是行不通的。在</p>
<p>这是一个示例,您可以区分<code>stdout</code>fd1和{<cd4>}fd2:</p>
<pre><code>$ strace -ewrite python2 test.py
[snip]
write(1, "This is a real tty :)\n", 22This is a real tty :)
) = 22
write(2, "standard error data", 19standard error data) = 19
write(1, "standard output data", 20standard output data) = 20
+++ exited with 0 +++
</code></pre>
<p>在上面的示例中,您可以看到每个<code>standard xxx data</code>加倍,因为您不能重定向stdout/stderr。但是,您可以要求<code>strace</code>将其输出保存到文件中。在</p>
<p>从理论上讲,如果<code>stdout</code>和{<cd4>}指的是同一个终端,那么在进程上下文中,无论是在用户模式(LD_PRELOAD),还是在内核空间(strace工具使用的ptrace接口)中,您只能区分这两个终端。一旦数据击中实际设备,真实的或伪的,区别就失去了。在</p>