- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
等待命令是否在 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
等待所有后台作业。 tcsh
与 csh
兼容,这是您链接的大学文档所指的内容。
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/
我有这个非常简单的 csh 脚本。 #!/bin/csh echo "Hello World!" echo "How are you today?" 但我收到错误“:未
简短的 我如何 (1) 启动一个新的 csh,(2) 强制它执行一些不在任何 .cshrc 中的命令(尽管我可以将它们安排在非标准位置以获取源)和(3)然后去互动? 例如。除了在 http://www
我想获取多个目录中所有 ofl 类型文件的列表。我使用了以下命令: ls RESULTS/*/quakesim/iecrud/quake/fgb/stflt/*.ofl 但我收到一条消息:/bin/l
例如,我想用逗号作为分隔符分割“一,二,三”,并使用循环分别处理结果的三个子字符串。 最佳答案 比当前提出的解决方案更简单的解决方案涉及使用内置替换修饰符 - 在这种情况下没有必要或理由浪费地使用循环
我想获取多个目录中所有 ofl 类型文件的列表。我使用了以下命令: ls RESULTS/*/quakesim/iecrud/quake/fgb/stflt/*.ofl 但我收到一条消息:/bin/l
我确实有一个需要 csh 的工具,但我的默认 shell 是 bash。我想要/需要在 csh 中从 bash 执行或获取 csh 脚本,并且我想在脚本执行后以 csh 提示结束。 从 bash 我可
我有以下非常简单的代码: #!/usr/bin/env csh set status=0 if ( 0 == 0 ) then ls ./dummyDir set status=$?
我有一个脚本,用于在调用 csh shell 中设置一些环境变量。其中一些变量取决于脚本的位置。 如果该文件是正确的 csh 脚本,我可以使用 $0 访问 __FILE__但如果我使用源代码运行脚本,
在 bash 中,我可以为一个命令设置一个临时环境变量,如下所示: LD_LIBRARY_PATH=/foo/bar myprogram 我可以在 csh/tcsh 中做类似的事情吗?我可以做 set
csh 是一个极其可怕的 shell。 (预先声明以避免不可避免地出现“不要使用 csh”的评论,或者也许我应该为了任何读者而声明:请,如果您重视自己的理智,请不要使用 csh。)我有一个相当大的 c
在 bash 中,我使用 Ctrl + w 来执行此操作,但它在我的 csh 中不起作用,它不是删除一个单词,而是清理整行。如何删除最后一个单词? 尽管 Ctrl + u 在 csh 和 bash 中
我有一个文件,其中包含以下命令。 #!/bin/csh -f echo "test test" //echo test [dobule space] test set a = "test tes
我有一个执行以下操作的小脚本。我已经为这个例子简化了它。 set logfile=$HOME/LOG/output.log find execute.sh -type f -exec csh -c '
我知道csh有很多启动文件(.login、.cshrc等)。问题是我正在启动一个新的 csh 终端,我看到很多非标准的(不是标准的,如 $HOME、$SHELL 等)在启动时设置的我没有的环境变量在我
我需要将 argv 中的部分内容连接到我的变量之一。 我将向您展示我的代码: #!/bin/csh set stringList = "" foreach param ($argv) if($
我想在 tcsh 中使用变量来保存脚本的使用信息,因此在我的脚本中,每当我编写 echo $usage 时,它都会打印 my_script -h : -help -b : do boo 等
如果两个文件没有区别,我想检查如何打印成功消息。 例子 diff file1 file2 最佳答案 shell 环境 $? 给出最后一条命令的结果。如果文件匹配则为 0,如果文件不同则为非 0。 di
我已经知道我可以使用参数-l来启动bash或ksh作为登录shell,所以我不不必获取诸如 ~/.profile、~/.bash_profile 等文件。但是在csh中,这句话 execl("/bin
如果输入日期具有以下格式,是否有办法将输入日期与当前日期进行比较? 2015 年 10 月 10 日星期六 00:00:55 现在我正在检查月份是否不在 NOV, DEC 中并且年份是否仍然是 201
如何计算字符串中的特定字符 - CSH。 set my_path = "/home/user/docs/files" set sum = ??? 比方说,我们需要计算'/' 最佳答案 如果你不能使用任
我是一名优秀的程序员,十分优秀!