Linux 通过$@杀死

Linux 通过$@杀死,linux,bash,Linux,Bash,有人能帮我解释一下我从一本书上得到的剧本吗。练习是编写一个名为killalljobs的脚本,该脚本将终止所有后台作业 为此给出的代码是: kill "$@" $( jobs -p) 我确定我在这里真的很胖。我知道,使用命令替换$(jobs–p)是所有后台作业PID的值。另外,如果脚本使用“killalljobs”命令运行,kill命令将杀死这些作业。我不确定$@是什么?例如,我知道它通常会扩展到运行脚本时给定的参数值 在本例中,这是否意味着提供给killalljobs命令的参数?如果是这

有人能帮我解释一下我从一本书上得到的剧本吗。练习是编写一个名为
killalljobs
的脚本,该脚本将终止所有后台作业

为此给出的代码是:

  kill "$@" $( jobs -p) 
我确定我在这里真的很胖。我知道,使用命令替换$(jobs–p)是所有后台作业PID的值。另外,如果脚本使用“killalljobs”命令运行,kill命令将杀死这些作业。我不确定
$@
是什么?例如,我知道它通常会扩展到运行脚本时给定的参数值


在本例中,这是否意味着提供给killalljobs命令的参数?如果是这种情况,我不确定您将为killalljobs命令提供哪些参数?

$@
表示“传递给脚本的所有参数”


因此,脚本的计算结果为“杀死
作业返回的所有作业-p

$@
表示“传递给脚本的所有参数”


因此,脚本的计算结果为“杀死
jobs-p
返回的所有作业”

如果您阅读
kill
man
页面(
man kill
),它会显示选项:

等等,以便更好地指定任务。因此,它将扩展到

kill -9 pid1 pid2 ... pidn
此外,它还允许您输入额外的
pid
s:

killalljobs -9 epid1 epid2 epid3
将用于

kill -9 epid1 epid2 epid3 pid1 pid2 ... pid3
这样不仅可以杀死后台作业,还可以用您自己给脚本的
pid
s杀死进程


简短回答:它让用户可以更自由地确定命令的确切行为,并且只需很少的执行工作。

如果您阅读
kill
man
页面(
man kill
),它会显示选项:

等等,以便更好地指定任务。因此,它将扩展到

kill -9 pid1 pid2 ... pidn
此外,它还允许您输入额外的
pid
s:

killalljobs -9 epid1 epid2 epid3
将用于

kill -9 epid1 epid2 epid3 pid1 pid2 ... pid3
这样不仅可以杀死后台作业,还可以用您自己给脚本的
pid
s杀死进程

简短回答:它让用户可以更自由地确定命令的确切行为,并且不需要太多的实现工作。

“$@”
是首先为脚本提供的参数,这意味着使用类似于暴力(a)的方式调用它:

将转化为:

kill -9 <pid1> <pid2> ...
kill-9。。。
bash
手册页,稍作解释:

$@
展开到位置参数,从一开始。当展开发生在双引号内时,每个参数展开为一个单独的字。也就是说,
“$@”
相当于
“$1”“$2”


(a)
-9
,正如一篇评论中所指出的,通常应该是终止流程的最后手段,因为它“无法讨价还价,无法推理,不会感到怜悯、懊悔或恐惧,而且在流程结束之前,它绝对不会停止”

我只是使用它作为传递参数的示例。

“$@”
是首先给定给脚本的参数,这意味着使用类似于暴力(a)的东西调用它:

将转化为:

kill -9 <pid1> <pid2> ...
kill-9。。。
bash
手册页,稍作解释:

$@
展开到位置参数,从一开始。当展开发生在双引号内时,每个参数展开为一个单独的字。也就是说,
“$@”
相当于
“$1”“$2”


(a)
-9
,正如一篇评论中所指出的,通常应该是终止流程的最后手段,因为它“无法讨价还价,无法推理,不会感到怜悯、懊悔或恐惧,而且在流程结束之前,它绝对不会停止”


我只是将其用作传递参数的示例。

此示例旨在用作完成特定任务的函数(或脚本),但也接受可能变化的参数。 注意:

#!/bin/sh 

myfunc()
{
    echo kill "$@" $(jobs -p) 
}

myfunc -l -L


myfunc -l

此示例旨在用作完成特定任务的函数(或脚本),但也接受可能变化的参数。 注意:

#!/bin/sh 

myfunc()
{
    echo kill "$@" $(jobs -p) 
}

myfunc -l -L


myfunc -l

只有很小的注释(+1 btw),也许应该警告不要使用
-9
;因为这是一种终止进程的糟糕方式。。。。因为当它绝对地、肯定地必须立即停止时!:-)但是我已经根据你的建议添加了一条注释,谢谢,@CommuSoft。只有一条小评论(+1 btw),也许应该警告不要使用
-9
;因为这是一种终止进程的糟糕方式。。。。因为当它绝对地、肯定地必须立即停止时!:-)但是我已经按照你的建议添加了一条注释,谢谢@CommuSoft。你没有解释
“$@”
在那里做什么。无论
“$@”
,该解释句都是正确的。您未能解释
“$@”
在那里做了什么。无论
“$@”
,该解释句都是正确的。