谁能帮我解释一下我从一本书上拿到的剧本。本练习将编写一个名为killalljobs的脚本,该脚本将终止所有后台作业。
为此给出的代码是:
kill "$@" $( jobs -p) 我确定我真的是个笨蛋。我知道使用命令替换时,$( jobs -p)是所有后台作业PID的值。另外,如果脚本是使用‘kill Also’命令运行的,那么kill命令将杀死这些作业。我不确定$@是什么?例如,我知道它通常会扩展到运行脚本时给定的参数值。
在这种情况下,这是否意味着提供给killalljobs命令的参数?我不确定如果是这样的话,你会给killalljobs命令什么参数?
发布于 2015-10-08 23:41:07
如果您阅读kill (man kill)的man页面,它会显示选项:
- -s --signal指定要发送的信号。可以使用名称或编号来指定信号。信号的行为在signal(7)手册页中解释。-l --列出信号列表信号名称。此选项有可选参数,它将信号编号转换为信号名称,或者反过来。-L --table在一个漂亮的表中列出信号名称。
因此,您可以将这些参数传递给kill。
例如,通过使用kill -9 pid,您可以立即终止进程(但不建议这样做)。所以现在你可以使用:
killalljobs -9等,以便更好地指定任务。因此,它将扩展为
kill -9 pid1 pid2 ... pidn此外,它还允许您提供额外的pid:
killalljobs -9 epid1 epid2 epid3将扩展到
kill -9 epid1 epid2 epid3 pid1 pid2 ... pid3因此,不仅会杀死后台作业,还会杀死您自己给脚本的pid进程。
简而言之:它给了用户更多的自由来确定命令的确切行为,并且只需要很少的实现工作。
发布于 2015-10-08 23:39:51
$@表示“传递给脚本的所有参数”。
因此,脚本的计算结果是“杀死jobs -p返回的所有作业”。
发布于 2015-10-08 23:52:17
此示例旨在用作一个函数(或在脚本中),它完成特定的任务,但也接受可能不同的参数。请注意:
#!/bin/sh
myfunc()
{
echo kill "$@" $(jobs -p)
}
myfunc -l -L
myfunc -lhttps://stackoverflow.com/questions/33020149
复制相似问题