"kill %1" 失败并在脚本中打印 "No such process"
"kill %1" fails and prints "No such process" inside script
我目前主要使用破折号 shell。
我试着写了一个应该模仿 wait 的小函数,但是有一些文本。
这是一个最小的工作代码:
#!/bin/dash
wait() {
echo Waiting...
local pid=""; shift
local delay=.250
while kill -0 "${pid}" 2>/dev/null; do
echo Still waiting...
sleep "${delay}"
done
echo Resuming
}
main() {
sleep 3 &
wait %1
}
main
如果将其复制粘贴到破折号中 shell,您会发现代码运行良好。
无论如何,如果您尝试将其保存在文件中,它不会。
经过一些故障排除后,我发现删除 2>/dev/null
,您可以看到一条错误消息:kill: No such process
、 但 使用 command wait "${pid}"
它只是等待它。
例如:
#!/bin/dash
wait() {
echo Waiting...
local pid=""; shift
command wait "${pid}"
echo Resuming
}
main() {
sleep 3 &
wait %1
}
main
作为文件脚本也能正常工作。
我不确定where/what这段代码我错了,我试过的一些东西没有帮助。
在试验中,我尝试将 %1
转换为其 pid,但是 jobs -p %1
在子 shell(例如 var="$(jobs -p %1)"
)中失败严重。
有什么建议吗?
Job control 在非交互式 shell 中被禁用。使用 set -m
或将 -m
附加到 shebang 来启用它,它就会起作用。
示例:
$ dash -c 'sleep 1 & kill %1 && echo success'
dash: 1: kill: No such process
$ dash -m -c 'sleep 1 & kill %1 && echo success'
success
我目前主要使用破折号 shell。
我试着写了一个应该模仿 wait 的小函数,但是有一些文本。
这是一个最小的工作代码:
#!/bin/dash
wait() {
echo Waiting...
local pid=""; shift
local delay=.250
while kill -0 "${pid}" 2>/dev/null; do
echo Still waiting...
sleep "${delay}"
done
echo Resuming
}
main() {
sleep 3 &
wait %1
}
main
如果将其复制粘贴到破折号中 shell,您会发现代码运行良好。
无论如何,如果您尝试将其保存在文件中,它不会。
经过一些故障排除后,我发现删除 2>/dev/null
,您可以看到一条错误消息:kill: No such process
、 但 使用 command wait "${pid}"
它只是等待它。
例如:
#!/bin/dash
wait() {
echo Waiting...
local pid=""; shift
command wait "${pid}"
echo Resuming
}
main() {
sleep 3 &
wait %1
}
main
作为文件脚本也能正常工作。
我不确定where/what这段代码我错了,我试过的一些东西没有帮助。
在试验中,我尝试将 %1
转换为其 pid,但是 jobs -p %1
在子 shell(例如 var="$(jobs -p %1)"
)中失败严重。
有什么建议吗?
Job control 在非交互式 shell 中被禁用。使用 set -m
或将 -m
附加到 shebang 来启用它,它就会起作用。
示例:
$ dash -c 'sleep 1 & kill %1 && echo success'
dash: 1: kill: No such process
$ dash -m -c 'sleep 1 & kill %1 && echo success'
success