考虑以下代码
外部作用域.sh
#!/bin/bash
set -e
source inner-scope.sh
echo $(inner)
echo "I thought I would've died :("
Run Code Online (Sandbox Code Playgroud)
内部作用域.sh
#!/bin/bash
function inner() { echo "winner"; return 1; }
Run Code Online (Sandbox Code Playgroud)
我试图outer-scope.sh
在调用inner()
失败时退出。由于$()
调用子外壳,这不会发生。
如何在保留函数可能以非零退出代码退出的事实的同时获得函数的输出?
我试图弄清楚为什么 Eclipse 会旋转,所以我决定启动 strace。
我使用以下方法找到了 eclipse 过程:
$ ps ax | grep java
5546 ? Sl 19:04 /usr/bin/java ... [arguments omitted]
Run Code Online (Sandbox Code Playgroud)
通过strace
在这个进程上运行,我看到它正在等待另一个进程:
$ sudo strace -p 5546
Process 5546 attached - interrupt to quit
futex(0x7f6c416679d0, FUTEX_WAIT, 5547, NULL^C <unfinished ...>
Process 5546 detached
Run Code Online (Sandbox Code Playgroud)
有趣的是,进程 5547 没有出现在ps
(谁能告诉我为什么?),但我可以strace
。它反复吐出很多 EAGAIN 失败(偶尔成功)
read(16, 0x7f6c41664d10, 16) = -1 EAGAIN (Resource temporarily unavailable)
recvfrom(15, 0x7f6c3815f2e4, 4096, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
clock_gettime(CLOCK_MONOTONIC, {67410, 357843264}) = 0 …
Run Code Online (Sandbox Code Playgroud) 是否可以向 ssh 内的进程发送 SIGTERM (或其他)信号,例如:
ssh hostname 'sleep 10; echo done'
Run Code Online (Sandbox Code Playgroud)
我可以做什么来中断睡眠命令?如果我按 ctrl-c,ssh 命令会被中断。