Linux xclip在跟踪时不会终止

Linux xclip在跟踪时不会终止,linux,unix,ubuntu,x11,xclip,Linux,Unix,Ubuntu,X11,Xclip,我发表了以下意见: $ xclip text.txt 执行立即终止,它将text.txt的内容复制到默认选择XA_PRIMARY,这意味着您可以通过鼠标中键或xclip-o粘贴它 当我想看到xclip正在做什么时,它不再终止: $ xclip -verbose text.txt Connected to X server. Using UTF8_STRING. Reading text.txt... Waiting for selection requests, Control-C to qu

我发表了以下意见:

$ xclip text.txt
执行立即终止,它将
text.txt
的内容复制到默认选择
XA_PRIMARY
,这意味着您可以通过鼠标中键或
xclip-o
粘贴它

当我想看到xclip正在做什么时,它不再终止:

$ xclip -verbose text.txt
Connected to X server.
Using UTF8_STRING.
Reading text.txt...
Waiting for selection requests, Control-C to quit
  Waiting for selection request number 1
直到我在X11系统中选择某个内容,例如我粘贴在这里的输出,它才会终止。如果行为仅限于
verbose
,我会理解这一点。毕竟你想坐下来看看会发生什么

我可以用
strace
重现相同的行为,但前提是提供了fork选项

$ strace -f xclip text.txt
或者,当使用系统执行命令从Ruby中剥离时,该命令应该返回输出,而输出实际上是空的

$ ruby -e "`xclip text.txt`"
strace
给出的提示是,它正在轮询文件描述符以等待事件。如果我选择了某个内容,则此事件是满意的。这种行为可以解释吗?我已经得到证据,这在任何系统上都是不可复制的。这可能和票有关吗


我正在Ubuntu 13.04上运行
xclip
0.12版。

xclip在启动时没有
-verbose
-verbose
的唯一区别在于没有子分叉,相同的原始进程处理事件

通常,在X窗口工具包中,复制/粘贴通过以下方式实现:

选择是由atom命名并由 特定客户。选择的数量不受限制 协议尽可能多的选择原子可能存在。选择是 旨在为建立沟通机制提供基础 在客户之间。官方定义的定义见 X协议:

“…具有动态类型的间接属性;即, 而不是将属性存储在服务器中,而是对其进行维护 由某个客户(“所有者”)提供。 选择在本质上是全局性的,并且是 被认为是属于用户的(尽管由客户端维护), 而不是作为某个特定窗口的私有子层级或 特定的客户端集。”

从应用的角度来看, 选择提供了在X之间传输信息的机制 客户。由于X是一种网络协议,因此存在一个单独的 不同客户端之间的数据传输通道无法连接 假定存在。选择仅适用于以下数据传输: 与应用程序的用户界面方面直接相关, 虽然这项政策没有强制执行

选择的内容存储在应用程序本身中,并通过 ConvertSelection事件(“convert”),因为有一种方法 询问所选数据的特定mimetype(或“视图”或格式)。 转换同样发生在拥有选定缓冲区的应用程序中

由于这种架构,无法“将文本复制到系统” 缓冲区和退出”-因为您是一个系统缓冲区。XClip模拟“复制和退出”
通过分叉和后台处理。

你能详细说明我通过
strace
和从另一个程序中剥离所观察到的情况吗?也许这会让它更清楚,因为到目前为止,我不知道这与分叉有什么关系,除了它不能以非并发方式工作之外?我猜ruby中的shell会等待进程树的更新终止(包括分叉子项)。如果您在另一个shell中执行
xclip test.txt
,您的ruby进程将退出,因为xclip child失去了X选择,不再需要为它服务。我不知道为什么这个答案被评为负面。这是绝对正确的。
-verbose
禁用
xclip
的守护行为。当您
strace-f
a d作为一个加密程序,strace也不会被神奇地守护,它只是停留在前台,跟踪原始程序的所有后代,直到没有任何后代。关于
ruby
,我不能说太多,因为我从未使用过它,但如果ruby程序中的反引号类似于shell或perl中的反引号,那么它确实可能是w等待daemonization进程写入其在stdout上仍然打开的管道。@WumpusQ.Wumbley感谢您的评论,将其置于daemonization的上下文中会使其更加清晰。@AndreySidorov您介意在回答中添加Wumpus吗?:)