shell之使用eval模拟一维数组保存进程pids,并调用wait等待所有进程执行完返回
2014-09-10 14:53
531 查看
以下脚本实现的功能是启动多个memtester进程测试DDR的稳定性,并在后台运行;由于sh Shell不支持数组类型的数据类型,导致在while循环中不能把“$i”当索引使用数组。在这种情况下,使用eval pid$i=$!来保存启动的进程ID(该命令执行结果为:pid1=ID1, pid2=ID2, ......); 所有的memtester进程启动后,调用uwait()函数,同样使用eval wait
\$pid$i等待所有memtester进程的退出。
eval命令将会首先扫描命令行进行所有的替换,憨厚再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。所以eval可以模拟一维数组,正如脚本中所使用,同样也可以模拟二维数组。
wait命令等待制定的pids进程执行完后返回。
\$pid$i等待所有memtester进程的退出。
eval命令将会首先扫描命令行进行所有的替换,憨厚再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。所以eval可以模拟一维数组,正如脚本中所使用,同样也可以模拟二维数组。
wait命令等待制定的pids进程执行完后返回。
#!/bin/sh #$1 - size of memory region #$2 - loops #$3 - number of memtester process umemfree() { cat /proc/meminfo | grep MemFree rm /media/sdcard/memtester*.log 2>/dev/null } umemtester() { i=1 while [ "$i" -le $3 ] do memtester $1 $2 1>/dev/null 2>/media/sdcard/memtester"$i".log & eval pid$i=$! i=$((i+1)) done } uwait() { i=1 while [ "$i" -le $1 ] do eval wait \$pid$i cat /media/sdcard/memtester"$i".log i=$((i+1)) done } # Main ./test_mpeg4_dec.sh & vsppid=$! umemfree date umemtester $1 $2 $3 uwait $3 date kill -1 $vsppid
相关文章推荐
- wait命令_Linux wait 命令用法详解:等待进程执行完后返回
- c# 使用Process调用外部程序时等待该进程结束后再执行住进程
- linux内核的 等待队列 使用方法,wait_queue_head_t,进程休眠
- delphi 中使用WaitForMultipleObjects等待线程执行,再执行后续代码
- FregServer进程,发送BC_TRANSACTION,唤醒ServiceManager进程,返回BR_TRANSACTION_COMPLETE,睡眠等待主线程thread->wait
- JAVA调用系统命令或可执行程序--返回一个Runtime运行时对象,然后启动另外一个进程来执行命令
- 请问如何等待异步API调用返回结果后再将结果返回给主进程?
- 主线程中使用join等待所有子线程执行结束
- 使用exec函数组调用执行shell脚本
- Service Manager进程,发送BC_REPLY,唤醒FregServer进程,返回BR_TRANSACTION_COMPLETE,睡眠等待在proc->wait
- 使用python subprocess模块实现调用shell执行命令
- 【如何使用shell 脚本调用java进程】
- linux内核的 等待队列 使用方法,wait_queue_head_t,进程休眠
- 进程 等待 关闭 ShellExecuteEx WaitForSingleObject
- 使用exec函数组调用执行shell脚本
- linux内核的 等待队列 使用方法,wait_queue_head_t,进程休眠
- linux内核的 等待队列 使用方法,wait_queue_head_t,进程休眠
- Windows批处理 调用程序后 不等待子进程 父进程继续执行命令
- 如何调用一个程序,等待运行结束,并知晓程序运行成功与否:ShellExecuteEx;WaitForSingleObject;GetExitCodeProcess(C代码)
- linux下的wait()实现等待一个子进程和所有子进程退出