为什么“yes&”会使我的 Bash 会话崩溃?
“是的,而且……”是即兴喜剧中的一个精彩的经验法则。在 UNIX 世界中则不然。 当我运行这个公认的愚蠢yes&命令时,我无法中断它。终端崩溃或陷入循环。 我希望该yes进程立即暂停,因为如果尝试写入标准输出,后台的任何进程都应该暂停,但情况似乎并非如此,我想知道为什么。 ...
“是的,而且……”是即兴喜剧中的一个精彩的经验法则。在 UNIX 世界中则不然。 当我运行这个公认的愚蠢yes&命令时,我无法中断它。终端崩溃或陷入循环。 我希望该yes进程立即暂停,因为如果尝试写入标准输出,后台的任何进程都应该暂停,但情况似乎并非如此,我想知道为什么。 ...
我运行了很多 vim 窗口,并且经常将它们放在 bg 中。问题是vim我列出的时候他们都说了jobs,所以很难区分。 [1] - suspended nvim [2] - suspended nvim [3] + suspended nvim 解决此问题的一种方法是在启动 vim 时打开特定文件: nvim ./myfile jobs: [1] + suspended nvim myfile 但这是一个糟糕的名字替代品。 另一种选择是(错误)使用这样的环境变量来命名缓冲区: vim name=my_name 但是 的输出jobs可能更...
我尝试运行以下命令: cat base64 /dev/stdin md5sum /dev/stdin tail /dev/stdin 在所有情况下,当我这样做时: ^Z $ bg $ jobs 我得到的状态是:[1]+ Stopped而不是[1]+ Running. 但如果我从管道中读取,则该作业被视为正在运行: mkfifo /tmp/fifo1 cat /tmp/fifo1 ^Z $ bg $ jobs # [1]+ Running tail /tmp/fifo1 & 为什么读取/dev/st...
jobs在 Bash 5.2 中,以下任一操作之后的输出是相同的模作业编号: sleep 3 # press C-z s() { sleep 3; } s # press C-z 在两者中,jobs都会产生类似的东西 [1]+ Stopped sleep 3 在 Zsh 5.9 (x86_64-apple-darwin20.6.0) 中,第一个生成包含以下sleep命令的类似足够的输出: [1] + suspended sleep 3 第二个产生几乎无用的输出: [1] + suspended 我有许多...
我有一个通过 ctrl + z 和 bg 在后台运行的作业,重新连接 ssh 后,我无法在 jobs 命令中找到该作业,但可以在 ps grep 中找到它。现在,我搜索了这个,我得到 tmux 可能是一个更好的解决方案,但是,我仍然想知道为什么 exit ssh 会丢失 jobs 命令中的作业。我已经把它放在后台了,重新连接后它应该存在,对吗? 与 tty/ssh 会话断开连接后如何管理作业? ...
我知道ctrl+z改变了一个过程前景到背景- 作为暂停- 通过SIGTSTP。我可以通过fg或bg根据需要重新运行后台挂起的进程。 问题 bg发出什么信号fg? 不确定两者发送的内容是否相同或不同。 我确实意识到没有既非man fg也非man bg。好吧,没有关于通过fg --help和的信号的信息bg --help ...
我有一个本质上是阻塞的进程。它首先被执行。为了执行第二个进程,我将第一个进程移动到后台并执行第二个进程。使用 wait 语句,我在终端中等待。然而,似乎退出外壳后(按CTRL+ C),第一个进程并没有顺利退出。下面是 shell 脚本: 执行.sh #!/bin/sh # start process one in background python3 -m http.server 8086 & # start second process firefox "http://localhost:8086/index.html" wait 我发...
的输出jobs看起来像这样 [1] Stopped TERM=xterm-256color vim --servername vim ~/.gitconfig [2]- Stopped TERM=xterm-256color vim --servername vim ~/.vimrc (wd: ~) [3]+ Stopped TERM=xterm-256color vim --servername vim i3blocks.conf (wd: ~/.c...
我需要检索一个进程的 PID,该进程通过管道传输到另一个进程,这些进程一起作为 bash 中的后台作业生成。以前我只是简单地依赖pgrep,但事实证明,在pgrep找到进程之前可能会有 >2 秒的延迟: #!/bin/bash cmd1 | cmd2 & pid=$(pgrep cmd1) # emtpy in about 1/10 我发现针对此问题的一些常见建议是使用进程替换而不是简单的管道 ( cmd1 >(cmd2) & pid=$!) 或使用jobs内置函数。进程替换运行整个子shell(对于整个运行时),所以我宁愿jo...
我有几个 cronjobs 在一天中的不同时间运行,但一个特定的 cronjobs 没有按预期运行并在一段时间后终止。 0 0 * * * python3 /scratch/pyscripts/backdoor.py --user SEKHAR >> /scratch/tlog/backdoor.log 2>&1; backdoor.py 脚本将在 for 循环中一一执行每个文件,它会在 1 小时或大约执行 25 个文件后突然终止。日志文件中既没有错误消息,也没有退出消息。 但当手动执行时,运行很顺利。 如何调试这个特定的 cr...
这是我在Arch的dash shell和FreeBSD默认的sh shell中测试的,结果是一样的。 $ sleep 100 & $ jobs [1] + Running sleep 100 $ jobs | wc 0 0 0 $ jobs | grep 1 我不能wc或grep在命令的输出上jobs。该jobs命令是 shell 内置的。 这是什么原因呢?是否以jobs某种方式在交互式 shell 和管道中打印不同的信息?我不知道细节,但我知道 的类似行为ls。即,您将在 ...
我需要在 bash 命令行中启动 service1 。一段时间后,我不再需要该服务,我按 CTRL-C 来停止它。该服务启动了另一个后台服务2。为了停止它,我通常在 service1 停止后执行“killall service2”。我可以像这样在一个命令行中执行此操作吗?: #: service1; killall service2 上面的代码不起作用,因为如果我执行 CTRL-C,第二部分(killall)永远不会执行。 ...
我有一个在 cPanel 服务器(CentOS 6)上运行的自定义脚本,如下所示。它在指定端口上启动一项服务来接受传入数据。它用开始命令并运行正常。 #!/bin/bash PORT_NUMBER=xxxx echo "Start Time: $(date)" if sudo netstat -altpn|grep xxxx | grep -q 'CLOSE_WAIT'; then echo "Found Close Wait" sudo stop comm sleep 60 sudo stop comm sudo lsof -i tcp:${PORT_NU...