如何知道不停止执行哪个命令?


20

在我的示例中,我运行的命令执行时间很长(几个小时)。

我真的不记得我输入了make还是make -j4。

当然,我可以停止它并按键或查看历史记录来知道它,但这将停止该过程,并且我不希望发生这种情况(如果它已经在执行make -j4)。

有什么方法可以知道在不停止进程的情况下正在执行哪个命令?


5
从另一个终端尝试pgrep -a make
John1024 '18

2
在这种情况下,make您可以停止并重新启动它,它应该在中断的地方继续运行。
user253751 '18

Answers:


34

如果要查看make计算机上正在运行的每个实例的完整命令行,请打开一个新终端,然后尝试:

pgrep -a make

pgrep是搜索计算机上所有进程的程序。在这种情况下,它将寻找名为的程序make。该选项-a告诉pgrep您列出每个匹配进程的进程ID和完整命令行。(如果没有-a,它将仅返回进程ID。)有关pgrep的许多选项的更多信息,请参见man pgrep


7
这对于问题中的简单案例很有用。但是,如果该命令涉及管道,循环,命令序列,内部命令或变量扩展,则所查找的内容pgrep将与在命令行上键入的命令看起来有所不同。
kasperd

28

终端窗口处于活动状态时,您可以按Ctrl+ 暂停(暂停)该过程Z。然后,您可以通过键入在后台推送作业bg(您的作业现在将继续在后台运行,并且您可以同时在命令行上进行工作;这等效于&在命令行末尾启动作业)。然后使用光标箭头(向上和向下)查看所使用的命令。如果需要(但这不是必需的),可以通过键入将您的工作放在前台fg


7
这适用于某些命令,但不是全部。例如,如果您键入一个类似for X in {1..1000} ; do sleep $X ; done的循环,则该循环将被中断,并且不会发生其余的迭代。
kasperd

11
@kasperd是的,如果您问我,这很烦人,但是我发现了解决该问题的不错方法。用括号括起一个复杂的命令,因此它是一个子shell。然后Ctrl-Z将挂起整个子外壳并正确恢复。
penguin359

@kasperd不是在bash中,而是在zsh中。
JoL

4
无需将工作置于后台:只需将其暂停,检查历史记录(或jobs如@ichabod的答案所示),然后通过进行恢复即可fg
康拉德·鲁道夫'18

10

我做类似Stefan的事情:^ Z暂停工作,然后运行jobs。如果有多个进程正在运行,则可能必须找出暂停的是哪个作业,但这通常会显示命令行。然后运行fg以继续执行。


1

动态查看此消息的一种好方法是在顶部运行,它告诉您总体系统状态以及系统上正在运行的进程。

进行“ ps ux”可显示您的进程以及pid和其他信息,如果需要,您可以使用技能将其杀死,手册页是一个不错的资源,而执行技能或杀死-9会得到粘性过程。挂在设备等待等中。您还可以将其他信号发送到-hup等进程,重新启动守护程序等。

Top很不错,因为它显示了进程的大小,经过的时间,当前的cpu状态以及内存和交换的状态。

我经常在make.out日志文件上执行$ make>&make.out&,然后执行更少或tail -f。从现在开始,make作为一个进程从我的shell会话中分离出来。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.