Linux 在给定PID的情况下使用bg和fg

Linux 在给定PID的情况下使用bg和fg,linux,bash,shell,jobs,Linux,Bash,Shell,Jobs,我正在使用Ubuntu 如果给我一个作业的PID,我如何将暂停的作业置于后台/前台并运行状态 我知道bg/fg,但他们需要作业id而不是PID 此外,我会暂停工作与 kill -STOP <PID> 我知道我可以用它来恢复 kill -CONT <PID> 但我不知道如何在这个PID中使用bg和fg命令 编辑:我想说清楚: 场景:我有一个暂停的作业,我知道它的PID。如何将其恢复并使其在后台工作?您可以使用top或ps命令查看所有PID,也可以使用pidof命令获取P

我正在使用Ubuntu

如果给我一个作业的PID,我如何将暂停的作业置于后台/前台并运行状态

我知道bg/fg,但他们需要作业id而不是PID

此外,我会暂停工作与

kill -STOP <PID>
我知道我可以用它来恢复

kill -CONT <PID>
但我不知道如何在这个PID中使用bg和fg命令

编辑:我想说清楚:

场景:我有一个暂停的作业,我知道它的PID。如何将其恢复并使其在后台工作?

您可以使用top或ps命令查看所有PID,也可以使用pidof命令获取PID

例如,我想检查bash命令的PID,因此我将编写:

pidof bash
xeyes &
fg xeyes
xeyes 
或者使用ps命令,您可以编写

ps -C bash 
或者使用ps和grep,您可以编写:

ps aux | grep bash
或者只是在上面写下你需要的东西,然后检查一下

要向bg或后台发送命令,您必须添加&例如,在命令末尾,我想向bg发送xeyes,因此我将写:

pidof bash
xeyes &
fg xeyes
xeyes 
如果你想把它带到前台或前景,你会写:

pidof bash
xeyes &
fg xeyes
xeyes 
您还可以使用jobs-l命令查看所有作业

例如,我想运行xeyes命令,因此我将编写:

pidof bash
xeyes &
fg xeyes
xeyes 
移动鼠标时请注意眼睛,现在如果我想将其发送到bg,我可以在键盘上使用CTRL+Z。 如果你想检查它,你可以写作业 您将看到xeyes已停止

每个流程的左边都有一个数字,如下所示:

[1]-  6331 Running                 xeyes &
[2]+  Stopped                 xeyes
bg %2
bg # attention to + 
例如,对于我来说是2,您可以像这样重新启动PID:

[1]-  6331 Running                 xeyes &
[2]+  Stopped                 xeyes
bg %2
bg # attention to + 
或者您也可以在作业中找到带-l的PID来查看PID

代替bg%2,我可以写入bg 6332以将状态更改为运行

您还可以看到+或-在这种情况下,如果进程旁边的+符号被停止,您可以只写bg而不写任何类似的内容:

[1]-  6331 Running                 xeyes &
[2]+  Stopped                 xeyes
bg %2
bg # attention to + 
如果你想把你的命令带到fg,它和bg完全一样,这意味着你可以使用我已经提到过的方法之一

我想一想你的问题,这意味着进程已经收到停止信号,在收到CONT信号之前不会做任何事情,甚至不会终止

实际上,停止信号最常见的来源是用户在进程处于前台时按CTRL+Z,之后发送CONT的常用方式是键入fg或bg,分别在前台和后台继续进程,另一种向进程发送停止的方式是kill-STOP PID。类似地,CONT可以发送到具有kill-CONT PID的进程。 因为您向进程发送了术语信号,所以我假设您希望它们终止。要实现这一点,进程必须接收CONT信号。您可以通过在终端窗口中键入kill-CONT 6331 6332发送这些信息。请注意,这些PID是属于我的,您必须将其更改为您的

您可以使用top或ps命令查看所有PID,也可以使用pidof命令获取PID

例如,我想检查bash命令的PID,因此我将编写:

pidof bash
xeyes &
fg xeyes
xeyes 
或者使用ps命令,您可以编写

ps -C bash 
或者使用ps和grep,您可以编写:

ps aux | grep bash
或者只是在上面写下你需要的东西,然后检查一下

要向bg或后台发送命令,您必须添加&例如,在命令末尾,我想向bg发送xeyes,因此我将写:

pidof bash
xeyes &
fg xeyes
xeyes 
如果你想把它带到前台或前景,你会写:

pidof bash
xeyes &
fg xeyes
xeyes 
您还可以使用jobs-l命令查看所有作业

例如,我想运行xeyes命令,因此我将编写:

pidof bash
xeyes &
fg xeyes
xeyes 
移动鼠标时请注意眼睛,现在如果我想将其发送到bg,我可以在键盘上使用CTRL+Z。 如果你想检查它,你可以写作业 您将看到xeyes已停止

每个流程的左边都有一个数字,如下所示:

[1]-  6331 Running                 xeyes &
[2]+  Stopped                 xeyes
bg %2
bg # attention to + 
例如,对于我来说是2,您可以像这样重新启动PID:

[1]-  6331 Running                 xeyes &
[2]+  Stopped                 xeyes
bg %2
bg # attention to + 
或者您也可以在作业中找到带-l的PID来查看PID

代替bg%2,我可以写入bg 6332以将状态更改为运行

您还可以看到+或-在这种情况下,如果进程旁边的+符号被停止,您可以只写bg而不写任何类似的内容:

[1]-  6331 Running                 xeyes &
[2]+  Stopped                 xeyes
bg %2
bg # attention to + 
如果你想把你的命令带到fg,它和bg完全一样,这意味着你可以使用我已经提到过的方法之一

我想一想你的问题,这意味着进程已经收到停止信号,在收到CONT信号之前不会做任何事情,甚至不会终止

实际上,停止信号最常见的来源是用户在进程处于前台时按CTRL+Z,之后发送CONT的常用方式是键入fg或bg,分别在前台和后台继续进程,另一种向进程发送停止的方式是kill-STOP PID。类似地,CONT可以发送到具有kill-CONT PID的进程。 因为您向进程发送了术语信号,所以我假设您希望它们终止。要实现这一点,进程必须接收CONT信号。您可以通过在终端窗口中键入kill-CONT 6331 6332发送这些信息。请注意,这些PID是属于我的,您必须将其更改为您的


不能将fg和bg与pid一起使用。它们是shell内置的,需要作业规范,而不是pid。

不能将fg和bg与pid一起使用。它们是shell内置的,需要作业规范,而不是pid。

我希望您能从现在开始找到一种方法,但在情况和其他方面,这里有一种解决方法,可以从pid获取作业id,然后使用fg、bg命令:

myJobId=$(jobs -l | grep $myPID | cut -c2)
$myPID包含进程的pid

作业-l给出所有作业及其pid的列表。 然后grep$myPID给出该列表中的对应行。 然后cut-c2给出该行的第二个字符,即作业的id。
最后一个命令应该替换为正则表达式或类似的东西,以获取字符串第一个[]之间的任何数字,但它对我来说很好,因为我只有2个bg进程

我希望您从现在开始找到一种方法,但在情况和其他情况下,这里有一种解决方法,可以从pid获取作业id,然后使用fg,bg命令:

myJobId=$(jobs -l | grep $myPID | cut -c2)
$myPID包含进程的pid

作业-l给出所有作业及其pid的列表。 然后grep$myPID给出该列表中的对应行。 然后cut-c2给出该行的第二个字符,即作业的id。

最后一个命令应该替换为正则表达式或类似的东西,以获取字符串第一个[]之间的任何数字,但它对我来说很好,因为我只有2个bg进程

这些不都是可移植的示例。我刚刚在macOS Catalina上试了前两个,但都不起作用!不过,他们在Debian Linux上也能工作。thnx作为你的回答,macOS是unix,他或她的问题是关于Linux Ubuntu的!很公平。只是指出非bash特定的项。我不知道pidof,所以想试试。所以,在本例中,6331是进程的pid?我不确定fg 6331工作我已经有了一个进程的PID,我需要的是使暂停的作业返回到后台工作这些都不是可移植的例子。我刚刚在macOS Catalina上试了前两个,但都不起作用!不过,他们在Debian Linux上也能工作。thnx作为你的回答,macOS是unix,他或她的问题是关于Linux Ubuntu的!很公平。只是指出非bash特定的项。我不知道pidof,所以想试试。所以,在本例中,6331是进程的pid?我不确定fg 6331工作我已经有了一个流程的PID,我需要的是让暂停的作业在后台重新工作顺便说一下:这是一个非常好的问题!问UNIX问题的另一个地方是UNIX.stackexchange.combing,让它在后台工作?这到底意味着什么?假设我用kill-STOP停止了一个作业,如果我想让它再次运行,但在后台,我应该怎么做?顺便说一句:这是一个非常好的问题!问UNIX问题的另一个地方是UNIX.stackexchange.combing,让它在后台工作?这到底意味着什么?假设我用kill-STOP停止了一个作业,如果我想让它再次运行,但在后台,我应该怎么做?我认为这是正确的答案。这是bash和sh文档的状态,因此它不会采用PID。那么有没有办法实现我的目标呢?你有两个选择:发送SIGSTOP和SIGCONT到进程kill,或者使用带有fg和bg的jobspec。你可以看到运行作业ID和pids与作业-l。我认为发送SIGCONT不起作用:我尝试发送CONT信号,但它没有恢复我的终端输出。我认为这是正确的答案。这是bash和sh文档的状态,因此它不会采用PID。那么有没有办法实现我的目标呢?你有两个选择:发送SIGSTOP和SIGCONT到进程kill,或者使用带有fg和bg的jobspec。你可以看到用作业-l运行作业ID和PID。我认为发送SIGCONT不起作用:我尝试发送CONT信号,但是它没有恢复我的终端输出用空格和引号围绕pid,所以不匹配另一个进程,那么这个解决方案就可以了:myJobId=$jobs-l | grep$myPID | cut-c2用空格和引号围绕pid,所以不匹配另一个进程,那么这个解决方案就可以了:myJobId=$jobs-l | grep$myPID | cut c2