我有一个长时间运行的bash实例(在screen会话内),它在循环内执行一组复杂的命令(每个循环执行管道、重定向等)。
长命令行写在终端内 - 它不在任何脚本内。现在,我知道 bash 进程 ID,并且我有 root 访问权限 - 我怎样才能看到在其中执行的确切命令行bash?
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
Run Code Online (Sandbox Code Playgroud)
在另一个 shell 实例中,我想查看在 PID 1234 中执行的命令行:
bash$ echo $$
5678
bash$ su -
sh# cd /proc/1234
sh# # Do something here that will display the string \
'while true ; do someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep …Run Code Online (Sandbox Code Playgroud) 当我启动一个执行长时间运行的命令的 SSH 会话时,Ctrl+ C(SIGINT) 处理会发生什么?
我可以看到 SSH 会话已关闭,但我不确定谁先获得 SIGINT:是...
远程长时间运行的命令?也就是说,(a) 远程命令中的信号处理程序被调用并停止远程命令,(b) 产生它的外壳检测到命令停止,并停止 (c) 远程 sshd 检测到外壳停止,所以它关闭了连接
或者
本地 ssh 接收到信号,并关闭连接。
我认为 (1) 正在发生,但想确定一下。
我也不确定在这种情况下 shell 处理 SIGINT 会发生什么。例如,如果我...
ssh remote 'while true ; do sleep 1 ; date ; done'
Run Code Online (Sandbox Code Playgroud)
和Ctrl+ C,然后远程连接被删除。有没有办法在Ctrl+后保持活动状态的外壳下运行远程命令C?也就是说,在这种情况下,停止循环并允许我继续在远程 shell 上工作?
TL;DR 版本
观看此 ASCII 演员表或此视频- 然后找出发生这种情况的任何原因。下面的文字说明提供了更多的上下文。
设置细节
ssh上生成,连接到运行 Armbian 的 SBC(橙色 PI 零)。使用 iperf3 对链接进行基准测试
以 为基准时iperf3,笔记本电脑和 SBC 之间的链接低于理论 56 Mbits/sec - 正如预期的那样,因为这是一个非常“拥挤的 2.4GHz” (公寓楼)内的 WiFi 连接。
更具体地说:在iperf3 -sSBC 上运行后,在笔记本电脑上执行以下命令:
# iperf3 -c 192.168.1.150
Connecting to host 192.168.1.150, port 5201
[ 5] local 192.168.1.89 port …Run Code Online (Sandbox Code Playgroud) 我在 chroot-ed Debianarmel环境中看到了一些非常奇怪的东西。
但首先,有点背景故事......这很长,但问题很复杂,任何潜在的帮助都取决于了解完整的故事。
我有一个运行 Linux 的嵌入式 ARM SoC - 更具体地说,armel是 2.6.17 内核上的Debian Lenny。Debian的发行版本身易于升级到更高版本(sudo apt-get dist-upgrade),因此可以升至速度,到armel的版本
squeeze或甚wheezy。
问题是内核是自定义的......有问题的 ARM SoC 不是主线内核的一部分,所以它在 2.6.17 几乎被放弃了。
如果您知道 Linux 和 GLIBC 是如何工作的,那么您已经可以看到问题了——GLIBC 版本是用最低支持的内核版本编译的……这已经超过了 2.6.17。因此,如果我们尝试将 chroot 转换为 Debian 压缩...
$ # From inside the little ARM machine running Debian Lenny
$ sudo debootstrap --arch armel squeeze /squeeze \
http://ftp.whateverCountry.debian.org/debian
$ sudo -i
# mount -t proc none /squeeze/proc
# mount -t sysfs none /squeeze/sys …Run Code Online (Sandbox Code Playgroud) 我们的内存缓存守护进程报告非零的 'curr_connections'...
$ telnet memcache-server 11211
Escape character is '^]'.
stats
...
STAT curr_connections 12
...
Run Code Online (Sandbox Code Playgroud)
...然而,lsof显示没有套接字连接:
$ ssh memcache-server
# lsof -P -i -n | grep memcache
memcached 1759 memcached 26u IPv4 11638 0t0 TCP *:11211 (LISTEN)
memcached 1759 memcached 27u IPv6 11639 0t0 TCP *:11211 (LISTEN)
memcached 1759 memcached 28u IPv4 11642 0t0 UDP *:11211
memcached 1759 memcached 29u IPv6 11643 0t0 UDP *:11211
Run Code Online (Sandbox Code Playgroud)
我猜 'curr_connections' 并不意味着我认为它的作用......
我已经知道apt-cache了很长一段时间,但直到昨天才偶然发现apt-file。
我的问题是,鉴于两者的这种输出......
ttsiod@avalon ~
$ apt-cache search setxkb
x11-xkb-utils - X11 XKB utilities
xfce4-xkb-plugin - xkb layout switch plugin for the Xfce4 panel
ttsiod@avalon ~
$ apt-file find setxkb
fish: /usr/share/fish/completions/setxkbmap.fish
fish: /usr/share/fish/functions/__fish_complete_setxkbmap.fish
x11-xkb-utils: /usr/bin/setxkbmap
x11-xkb-utils: /usr/share/man/man1/setxkbmap.1.gz
xmanpages-ja: /usr/share/man/ja/man1/setxkbmap.1.gz
zsh: /usr/share/zsh/functions/Completion/X/_setxkbmap
zsh-beta: /usr/share/zsh-beta/functions/Completion/X/_setxkbmap
zsh-common: /usr/share/zsh/functions/Completion/X/_setxkbmap
Run Code Online (Sandbox Code Playgroud)
...为什么要费心使用 apt-cache?apt-file 不是在各方面都优越吗?
我可能错过了一些东西。
编辑:我问的原因是因为 apt-file 报告的包比 apt-cache 多。我只将 apt-cache 用于用例“我需要工具/手册页/任何名为 foo 的东西 - 哪些包包含 foo?” 似乎 apt-file 似乎可以完成 apt-cache 所做的一切,但更好 - 它报告了更多的包(apt-cache MISSES some),并且它还显示了所涉及的文件名。
我可以为我的 Android 平板电脑创建我自己的启动映像- 这意味着我理论上可以修改/sepolicy文件,例如,为会话shell使用的帐户提供adb shell完整的root权限。
我怎么做?例如,我如何列出该文件中已有的数据,然后修改它们?