标签: jobs

如果您从进程中 ^Z ,它会“停止”。怎么切换回来?

我不小心“停止”了我的telnet进程。现在我既不能“切换回”它,也不能杀死它(它不会响应kill 9292992929 是进程 ID。)

所以,我的问题是,如果你在 linux 命令行上有一个停止的进程,你如何切换回它,或者杀死它,而不必求助于kill -9

command-line process jobs background-process

120
推荐指数
3
解决办法
17万
查看次数

Bash 中延迟挂起 (Ctrl-Y) 的目的是什么?

适用的 Bash 手册页的完整部分仅说明:

如果运行 bash 的操作系统支持作业控制,则 bash 包含使用它的工具。在进程运行时输入挂起字符(通常是 ^Z、Control-Z)会导致该进程停止并将控制权返回给 bash。 输入延迟挂起字符(通常是 ^Y、Control-Y)会导致进程在尝试从终端读取输入时停止,并将控制权返回给 bash。 然后用户可以操纵这个作业的状态,使用bg 命令在后台继续它,fg命令在前台继续它,或 kill 命令将它杀死。A ^Z 立即生效,并具有导致挂起输出和预先输入被丢弃的额外副作用。

我从来没有用过Ctrl- Y; 我只是刚刚了解它。我只用Ctrl- Z(暂停)做得很好。

我试图想象这个选项的用途。什么时候有用?

(请注意,此功能并非在所有 Unix 变体上都存在。它存在于Solaris和 OpenBSD 上,但不存在于 Linux 或 FreeBSD 上。相应的设置是stty dsusp。)

也许不那么主观:有什么可以用Ctrl-Y不能用Ctrl-轻松完成的事情Z吗?

bash signals job-control jobs

32
推荐指数
2
解决办法
3777
查看次数

为什么“yes&”会使我的 Bash 会话崩溃?

“是的,而且……”是即兴喜剧中的一个很棒的经验法则。在 UNIX 世界中则不然。

当我运行这个公认的愚蠢yes&命令时,我无法中断它。终端崩溃或陷入循环。

我希望该yes进程立即暂停,因为如果尝试写入标准输出,后台的任何进程都应该暂停,但情况似乎并非如此,我想知道为什么。

bash job-control jobs background-process yes

28
推荐指数
2
解决办法
5549
查看次数

如何将命令行应用程序直接发送到后台?

我已经知道按下会ctrl+z停止应用程序,然后我可以使用bg命令将应用程序发送到后台,但这意味着应用程序停止的时间很短。

如何在不停止的情况下将应用程序直接发送到后台?

command-line shell jobs background-process

25
推荐指数
2
解决办法
3万
查看次数

为什么有些命令会“挂起”终端直到它们完成?

有时您从终端运行程序,例如lxpanel。终端不会让你回到提示,它会挂起。您可以按Ctrl+C返回提示,但这会杀死lxpanel. 但是,按Alt+ F2(弹出一个窗口以接收命令)并运行lxpanel正常。

为什么是这样?从终端运行命令与按Alt+时出现的“运行”窗口有什么不同F2

这里的 lxpanel 仅用作示例。我在多个程序中都经历过这种情况

command-line shell jobs

23
推荐指数
2
解决办法
4万
查看次数

如何计划一个任务在 bash 中另一个已经运行的任务之后运行?

我正在寻找诸如command1 ; command2如何运行之类的东西command2command1但我想计划command2何时command1已运行的执行。

它可以通过输入command2并通过 Enter 确认来解决,假设command1不消耗标准输入,command1并且不会在输出上产生太多文本,使得输入不切实际(输入的字符与command1输出混合)。

bash job-control jobs

22
推荐指数
3
解决办法
1万
查看次数

如何获取工作ID?

正如我们所知,shell 使用户能够&在命令行的末尾运行后台进程。每个后台进程都由一个作业 ID 标识,当然,由它的 PID 标识。

当我执行新作业时,输出类似于[1] 1234(第二个数字是进程 ID)。尝试调用类似的命令stop 1stop %1导致失败消息:stop: Unknown job: 1

了解该stop命令会导致作业暂停,我想知道如何获取作业 ID并正确执行。如果杀死作业的唯一方法是通过其进程 ID,那么作业 ID 的目的是什么?

process job-control jobs

21
推荐指数
2
解决办法
13万
查看次数

如果我开始过多的后台工作会怎样?

我需要使用期望脚本在 700 个网络设备上做一些工作。我可以按顺序完成,但到目前为止运行时间约为 24 小时。这主要是由于建立连接所需的时间以及这些设备(旧设备)的输出延迟。我能够建立两个连接并让它们并行运行就好了,但是我能推多远呢?

我不认为我可以一次完成所有 700 个,肯定有一些限制。我的 VM 可以管理的 telnet 连接数。

如果我确实尝试在这样的某种循环中启动其中的 700 个:

for node in `ls ~/sagLogs/`; do  
    foo &  
done
Run Code Online (Sandbox Code Playgroud)

  • CPU 12 个 CPU x Intel(R) Xeon(R) CPU E5649 @ 2.53GHz

  • 内存 47.94 GB

我的问题是:

  1. 所有 700 个实例可能同时运行吗?
  2. 在我的服务器达到极限之前我还能走多远?
  3. 当达到该限制时,它会等待开始下一次迭代foo还是盒子会崩溃?

不幸的是,我在公司生产环境中运行,所以我不能完全尝试看看会发生什么。

bash telnet jobs expect background-process

13
推荐指数
3
解决办法
6104
查看次数

退出外壳后后台作业会发生什么?

从我的理解,工作是管道从某一个shell启动的,你可以管理这些作业(fgbg,按Ctrl-Z)从该壳体内。一个作业可以由多个进程/命令组成。

我的问题是当原始的包含 shell 退出时这些作业会发生什么?假设未设置 huponexit 以便后台进程在 shell 退出后继续运行。

假设我已经做了:

$ run.sh | grep 'abc' &
[1] job_id
Run Code Online (Sandbox Code Playgroud)

然后我退出这个shell。我将进入一个新的 shell 并运行jobs,但显然什么也看不到。但是我可以执行ps aux | grep run.sh并查看此进程的运行情况,我也会执行ps aux | grep grep并查看grep 'abc'运行的进程。

有没有办法只获取完整管道的作业 ID,以便我可以一次性杀死它,或者我是否必须在退出原始 shell 后与另一个 shell 分开杀死所有进程?(我尝试过后者并且它有效,但跟踪所有过程似乎很麻烦。)

shell process kill jobs

10
推荐指数
2
解决办法
1万
查看次数

按当前用户列出所有 shell 会话(不仅仅是当前 shell)中的所有作业

我知道该jobs命令仅显示当前 shell 会话中运行的作业。

是否有 bash 代码可以显示当前用户跨 shell 会话的作业(例如,来自另一个终端选项卡的作业)?

shell bash terminal job-control jobs

10
推荐指数
1
解决办法
6165
查看次数