标签: jobs

如何终止在另一个 shell(终端窗口或选项卡)中启动的作业?

如果我开始一个进程并在终端窗口中将其作为后台(比如ping google.com &),我可以使用kill %1(假设它是作业 1)来终止它。

但是,如果我打开另一个终端窗口(或选项卡),后台进程不会在下面列出jobs并且不能直接使用kill.

是否可以从另一个终端窗口或选项卡中终止此进程?

注意:我正在使用 Xfce Terminal Emulator 0.4.3 和 bash(尽管如果解决方案存在于另一个通用 shell 中但不是 bash,我也愿意接受)

shell terminal job-control process-management jobs

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

后台作业不断停止

我在 RHEL6 bash 提示符下看到一些奇怪的行为。我经常喜欢执行看起来像……的命令行。

$ ./myscript > junk 2>&1
Run Code Online (Sandbox Code Playgroud)

...然后点击 ^Z 然后执行 ...

$ bg
$ tail -f junk
blah blah blah blah
blah blah blah blah
Run Code Online (Sandbox Code Playgroud)

但是今天出于某种原因,我看到我的工作保持“停止”状态,而不是“运行”状态。

$ uname -a
Linux myhost 2.6.18-371.11.1.el5 #1 SMP Mon Jun 30 04:51:39 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
$ ./myscript.sh > output-07-JUL-16.txt 2>&1
^Z
[1]+  Stopped                 ./myscript.sh > output-07-JUL-16.txt 2>&1
$ bg
[1]+ ./myscript.sh > output-07-JUL-16.txt 2>&1 &
$ jobs
[1]+ …
Run Code Online (Sandbox Code Playgroud)

command-line jobs background-process

9
推荐指数
1
解决办法
5390
查看次数

解释为什么 watch 'jobs' 不起作用,而 watch 'ps' 起作用?

jobs是我最喜欢的命令,用于查看我在后台运行的代码。为了动态检查它们,我倾向于键入

watch 'jobs'
Run Code Online (Sandbox Code Playgroud)

它不显示任何内容。然而

watch 'ps'
Run Code Online (Sandbox Code Playgroud)

完美地工作。几个月来我一直在犯同样的错误。

我认为理解为什么第一个不起作用而第二个起作用可以帮助我停止犯同样的错误。

任何人都可以帮忙吗?

command-line ps watch jobs background-process

9
推荐指数
1
解决办法
692
查看次数

为什么当我用 CTRL-Z 停止时 sleep 命令进程仍在后台运行?

我要做的是:

sleep 5 
Run Code Online (Sandbox Code Playgroud)

并立即CTRL-Z所以当我打开时,jobs我看到:

[1]+  Stopped                 sleep 5
Run Code Online (Sandbox Code Playgroud)

接下来,当我执行fg %1sleep 过程不再运行时,它已完成,这意味着它在运行 5(也许 4?)秒的同时运行Stopped。为什么?

process jobs background-process

9
推荐指数
1
解决办法
475
查看次数

unix 中暂停的作业会发生什么?

我们可以发出CTRL+Z暂停 Unix 中的任何作业,然后使用fg或使它们恢复生机bg。我想了解那些像这样被暂停的工作会发生什么?他们被杀死/终止了吗?换句话说,杀死和暂停进程有什么区别?

process signals process-management jobs background-process

8
推荐指数
2
解决办法
6324
查看次数

Ctrl-C 会杀死整行,而 Ctrl-Z 不会

我在使用分号分隔的命令行上运行多个命令:

cmd1; cmd2; cmd3

如果我在上面按Ctrl+ C,它会杀死所有命令,而不仅仅是当前正在执行的命令。

kartik@kartikpc:~/junk/exp$ ls
test1  test2
kartik@kartikpc:~/junk/exp$ cat; ls
cat is running
cat is running
^C
kartik@kartikpc:~/junk/exp
Run Code Online (Sandbox Code Playgroud)

但是Ctrl+Z只会暂停当前进程并继续下一个进程。

kartik@kartikpc:~/junk/exp$ ls
test1  test2
kartik@kartikpc:~/junk/exp$ cat; ls
cat is running 
cat is running
^Z
[1]+  Stopped                 cat
test1  test2
kartik@kartikpc:~/junk/exp$
Run Code Online (Sandbox Code Playgroud)

为什么行为存在差异,有没有办法让Ctrl+C表现得像Ctrl+ Z

我实际上是通过 tmux 会话运行服务器,如下所示node app.js; $bash,当我执行Ctrl+C来杀死服务器时,它也会杀死 bash。我想回到贝壳。有没有其他选择来实现我想要的行为?

[更新]

tcshCtrl+CCtrl+ 的行为相同 …

shell job-control jobs

8
推荐指数
1
解决办法
1234
查看次数

如何列出所有后台进程?

是否可以使用该ps命令列出所有正在运行的后台进程,或者是获取该命令后台进程列表的唯一选项jobs

ps jobs background-process

8
推荐指数
2
解决办法
5万
查看次数

是否可以在 bash 中将进程添加到作业列表中(例如,反转“disown”)?

如果我找到disown一份工作bash并改变主意,我可以以某种方式撤消它吗?

如果是这样,更进一步,是否可以将任意流程置于作业控制之下(可接受的限制是我拥有该流程)?

最后,这是否会使以下工作流程成为可能:

  • 将工作置于后台(^z后跟bg
  • 获取它的pid(jobs -p %+获取它的<pid>
  • 打开一个screentmux会话,附加到它并将其用于以下步骤
  • reptyr抢的作业(reptyr <pid>
  • 添加<pid>到 shell 的作业控制(这可能吗?
  • 停止作业 ( ^Z)

除了最后两步,我什么都能做。停止作业^Z不起作用,因为该进程不在 shell 的作业列表中。

我的研究表明不可能拥有(反向disown)一个 pid 但希望我错了......

bash process jobs reptyr disown

7
推荐指数
1
解决办法
992
查看次数

进程命令和百分号用法

我对通过 kill 命令使用百分号来停止工作感到困惑。我在 kill 的手册页中找不到任何表明可以使用百分号的文档。有人可以向我解释这个解释是否隐藏在其他地方,或者为什么使用这个%标志?

kill -s 19 %1 将停止 ID 为 1 的作业

kill jobs

7
推荐指数
2
解决办法
3466
查看次数

在函数中调用作业时无法 grep 作业列表

我可以grep输出jobs,我可以grep输出 a function。但是为什么我不能jobs在函数中grep 输出呢?

$ # yes, i can grep jobs
$ jobs
[1]+  Running          vim
[2]+  Stopped          matlab

$ jobs | grep vim
[1]+  Running          vim

$ # yes, of course i can grep a function
$ type mockjobs
mockjobs is a function
mockjobs ()
{
    echo '[1]+ Running         vim banjo'
}
$ mockjobs | grep vim
[1]+ Running         vim banjo

$ # now put those two together and surely …
Run Code Online (Sandbox Code Playgroud)

bash pipe function jobs subshell

7
推荐指数
1
解决办法
718
查看次数