相关疑难解决方法(0)

如何在shell脚本中获取最后执行的命令的pid?

我想要一个这样的shell脚本:

my-app &
echo $my-app-pid
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何获取刚刚执行的命令的pid。

我知道我可以只使用jobs -p my-app命令来grep pid。但是如果我想多次执行shell,这个方法就行不通了。因为工作规范是不明确的。

shell bash process background-process

311
推荐指数
2
解决办法
39万
查看次数

如何终止后台进程?

我已经在后台使用&. 突然停止下载。我想终止它的进程,然后重新运行命令。我怎样才能终止它?

我还没有关闭它的外壳窗口。但正如你所知,它不会停止使用Ctrl+CCtrl+ Z

command-line process kill job-control background-process

264
推荐指数
7
解决办法
73万
查看次数

终止在后台运行的 bash shell 脚本

我经常使用bashshell 脚本为许多不同的文件运行简单的命令。例如,假设我有以下bashshell 脚本,称为script.sh,它foo在三个文本文件"a.txt""b.txt"、上运行程序/命令"c.txt"

#!/bin/bash

for strname in "a" "b" "c"
do
foo $strname".txt"
done
Run Code Online (Sandbox Code Playgroud)

此外,假设这foo $strname".txt"很慢,因此脚本的执行将需要很长时间(例如,数小时或数天)。因此,我想使用,nohup以便即使终端关闭或断开连接也能继续执行。我还希望脚本立即转到后台,因此我将使用&运算符。因此,我将使用以下命令来调用script.sh

nohup bash script.sh &
Run Code Online (Sandbox Code Playgroud)

这适用于在后台运行脚本并且没有挂断,但现在假设我想出于某种原因在某个时候终止执行。我怎样才能做到这一点?

我遇到的问题是,通过查看top,我只能看到foo对应于"a.txt". 我可以终止那个foo调用,但是foo相应的 to"b.txt"被调用,然后我也必须终止那个调用,依此类推。对于for循环中指定的数十或数百个文本文件,每foo一个都一个一个地终止变得很痛苦!因此,我需要以某种方式终止 shell 脚本本身,而不是从 shell 脚本发出的特定调用。

当我输入命令时

ps -u myusername
Run Code Online (Sandbox Code Playgroud)

myusername我的用户名在哪里,我得到了我正在运行的进程列表。但是我看到两个不同的进程 ID 称为bash. …

shell process kill ps shell-script

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