在我的例子中,我正在运行一个需要很长时间才能执行的命令(几个小时)。
我确实不记得我是否输入了 make 或 make -j4。
当然,我可以停止它并按下向上键或检查历史记录来了解它,但这会停止该过程,我不希望发生这种情况(如果它已经在执行 make -j4)。
有没有什么办法可以在不停止进程的情况下知道正在执行哪个命令?
答案1
make
如果您想查看计算机上运行的每个实例的完整命令行,请打开一个新终端并尝试:
pgrep -a make
pgrep
是一个搜索计算机上所有进程的程序。在本例中,它正在寻找名为 的程序make
。该选项-a
指示pgrep
列出每个匹配进程的进程 ID 和完整命令行。(如果没有-a
,它只会返回进程 ID。)有关 pgrep 的众多选项的更多信息,请参阅man pgrep
。
答案2
Ctrl当终端窗口处于活动状态时,您可以按+暂停(挂起)该过程Z。然后,您可以通过键入将作业推送到后台bg
(您的作业现在将在后台继续,您可以同时在命令行上工作;这相当于在&
命令行末尾使用 启动作业)。然后使用光标箭头(向上和向下)查看您使用了哪个命令。如果您愿意(但这不是必需的),您可以通过键入 将作业推到前台fg
。
答案3
我执行类似 Stefan: ^Z 的操作来暂停作业,然后运行jobs
。如果您有多个进程正在运行,则可能必须找出哪个作业是您暂停的,但这通常会提供命令行。然后运行fg
以继续执行。
答案4
动态查看此情况的一个好方法是运行 top,它会告诉您整个系统状态和系统上正在运行的进程。
执行“ps ux”将显示您的进程以及 pid 和其他信息,如果您愿意,可以使用技能来终止其中一些进程,手册页是一个很好的资源,执行技能或 kill -9 可使粘性进程挂在设备等待等位置。您还可以向进程发送其他信号,例如 -hup,重新启动守护进程等。
Top 很有用,因为它可以显示进程大小、运行时间、当前 CPU 状态以及内存和交换的状态。
我经常在 make.out 日志文件上执行 $make >& make.out&,然后执行 less 或 tail -f。因为现在 make 已从我的 shell 会话中分离为一个进程。