gpt4 book ai didi

linux - Csh 脚本等待多个 pid

转载 作者:太空宇宙 更新时间:2023-11-04 10:02:18 26 4
gpt4 key购买 nike

等待命令是否在 csh 脚本中工作以等待超过 1 个 PID 完成?

wait 命令在移动到下一行之前等待列出的所有 PID 完成

例如

wait $job1_pid $job2_pid $job3_pid
nextline

因为我通常看到的在线文档只显示了只有 1 个 PID 的等待命令,尽管我读过使用等待多个 PID,如下所示: http://www2.phys.canterbury.ac.nz/dept/docs/manuals/unix/DEC_4.0e_Docs/HTML/MAN/MAN1/0522____.HTM

其中引用“如果指定了代表已知进程 ID 的一个或多个 pid 操作数,则等待实用程序会一直等待,直到所有进程终止”

最佳答案

不可以,csh 中内置的wait 命令只能等待所有作业完成。您引用的文档中的命令是一个单独的可执行文件,可能位于 /usr/bin/wait 或类似位置。此可执行文件不能用于您想要的用途。

我建议使用 bash 及其更强大的 wait 内置函数,它允许您等待特定的作业或进程 ID。


tcsh 手册页中,wait 等待所有后台作业。 tcshcsh 兼容,这是您链接的大学文档所指的内容。

wait The shell waits for all background jobs. If the shell is interactive, an interrupt will disrupt the wait and cause the shell to print the names and job numbers of all outstanding jobs.

您可以在 csh documentation here 上找到准确的文本.

文档中描述的 wait 可执行文件实际上是一个等待进程 ID 列表的单独命令。

但是,wait 可执行文件实际上无法等待正在运行的 shell 脚本的子进程,并且没有机会在 shell 脚本中做正确的事情.

例如,在 OS X 上,/usr/bin/wait 就是这个 shell 脚本。

#!/bin/sh
# $FreeBSD: src/usr.bin/alias/generic.sh,v 1.2 2005/10/24 22:32:19 cperciva Exp $
# This file is in the public domain.
builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"$@"}

无论如何,我无法让 /usr/bin/wait 可执行文件在 Csh 脚本中可靠地工作...因为后台作业不是 /的子进程usr/bin/wait 自己处理。

#!/bin/csh -f

setenv PIDDIR "`mktemp -d`"

sleep 4 &

ps ax | grep 'slee[p]' | awk '{ print $1 }' > $PIDDIR/job

/usr/bin/wait `cat $PIDDIR/job`

我强烈建议在 bash 或类似的环境中编写此脚本,其中内置等待确实允许您等待 pids 并且从后台作业捕获 pids 更容易。

#!/bin/bash

sleep 4 &
pid_sleep_4="$!"

sleep 7 &
pid_sleep_7="$!"

wait "$pid_sleep_4"
echo "waited for sleep 4"

wait "$pid_sleep_7"
echo "waited for sleep 7"

如果您不想重写您正在处理的整个 csh 脚本,您可以像这样从 csh 脚本中调用 bash。

#!/bin/csh -f

bash <<'EOF'

sleep 4 &
pid_sleep_4="$!"

sleep 7 &
pid_sleep_7="$!"

wait "$pid_sleep_4"
echo "waited for sleep 4"

wait "$pid_sleep_7"
echo "waited for sleep 7"

'EOF'

请注意,您必须以包含单引号的 'EOF' 结束该 heredoc。

关于linux - Csh 脚本等待多个 pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55273235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com