Expect脚本里我想完成这个功能,提示错误“child process exited abnormally”,请教。
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Expect脚本里我想完成这个功能,提示错误“child process exited abnormally”,请教。
在Expect脚本中,我想把系统当前进程中的corosync进程个数查询出来,并且赋值给一个变量corosync_count,请问该如何使用Tcl实现。
当corosync进程存在时,就使用kill -9杀掉这些进程。
# 检测当前系统进程中是否存在corosync的进程,并且把进程数赋值给corosync_count
set corosync_count [ exec ps -ef | grep 'corosync' | grep -v 'grep' | wc -l ]
# 如果进程数大于0,即存在corosync进程
if { $corosync_count > 0 } {
### 返回corosync的pid列
set corosync_pid [ exec ps -ef | grep 'corosync' | grep -v 'grep' | awk "{print \$2}" ]
### 遍历corosync_pid列表,杀死进程
foreach i $corosync_pid {
exec kill -9 $i
}
}
执行返回为
child process exited abnormally
while executing
"exec ps -ef | grep 'corosync' | grep -v 'grep' | awk "{print \$2}" "
当corosync进程存在时,就使用kill -9杀掉这些进程。
# 检测当前系统进程中是否存在corosync的进程,并且把进程数赋值给corosync_count
set corosync_count [ exec ps -ef | grep 'corosync' | grep -v 'grep' | wc -l ]
# 如果进程数大于0,即存在corosync进程
if { $corosync_count > 0 } {
### 返回corosync的pid列
set corosync_pid [ exec ps -ef | grep 'corosync' | grep -v 'grep' | awk "{print \$2}" ]
### 遍历corosync_pid列表,杀死进程
foreach i $corosync_pid {
exec kill -9 $i
}
}
执行返回为
child process exited abnormally
while executing
"exec ps -ef | grep 'corosync' | grep -v 'grep' | awk "{print \$2}" "
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: Expect脚本里我想完成这个功能,提示错误“child process exited abnormally”,
corosync进程运行的时候,在shell中查询如下
[root@localhost Desktop]# ps -ef | grep 'corosync' | grep -v 'grep' | awk '{print $2}'
2280
在expect中查询如下
expect1.1> set cp [ exec ps -ef | grep 'corosync' | grep -v 'grep' | awk "{print \$2}" ]
6934
为啥不一样呢?
[root@localhost Desktop]# ps -ef | grep 'corosync' | grep -v 'grep' | awk '{print $2}'
2280
在expect中查询如下
expect1.1> set cp [ exec ps -ef | grep 'corosync' | grep -v 'grep' | awk "{print \$2}" ]
6934
为啥不一样呢?
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: Expect脚本里我想完成这个功能,提示错误“child process exited abnormally”,
kose5@kose5-Aspire-4552:~$ cat t2.exp
#!/usr/bin/expect
set t9_sh_count [exec pgrep -c t9.sh]
if $t9_sh_count>0 {
set t9_sh_id [exec pgrep t9.sh]
send_tty "$t9_sh_id\n"
foreach i $t9_sh_id {
exec kill -9 $i
}
send_tty "已删除进程。\n"
exit
}
kose5@kose5-Aspire-4552:~$ pgrep t9.sh
14241
14242
kose5@kose5-Aspire-4552:~$ ./t2.exp
14241
14242
已删除进程。
kose5@kose5-Aspire-4552:~$ ./t2.exp
0
child process exited abnormally
while executing
"exec pgrep -c t9.sh"
invoked from within
"set t9_sh_count [exec pgrep -c t9.sh]"
(file "./t2.exp" line 3)
kose5@kose5-Aspire-4552:~$
没问题,只是当无t9.sh进程时,如何消除child process exited abnormally。。。等消息?
#!/usr/bin/expect
set t9_sh_count [exec pgrep -c t9.sh]
if $t9_sh_count>0 {
set t9_sh_id [exec pgrep t9.sh]
send_tty "$t9_sh_id\n"
foreach i $t9_sh_id {
exec kill -9 $i
}
send_tty "已删除进程。\n"
exit
}
kose5@kose5-Aspire-4552:~$ pgrep t9.sh
14241
14242
kose5@kose5-Aspire-4552:~$ ./t2.exp
14241
14242
已删除进程。
kose5@kose5-Aspire-4552:~$ ./t2.exp
0
child process exited abnormally
while executing
"exec pgrep -c t9.sh"
invoked from within
"set t9_sh_count [exec pgrep -c t9.sh]"
(file "./t2.exp" line 3)
kose5@kose5-Aspire-4552:~$
没问题,只是当无t9.sh进程时,如何消除child process exited abnormally。。。等消息?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: Expect脚本里我想完成这个功能,提示错误“child process exited abnormally”,
#变通一下ok了:
kose5@kose5-Aspire-4552:~$ cat t2.exp
#!/usr/bin/expect
set t9_sh_count [exec ps ax | grep -c t9.sh]
if $t9_sh_count>1 {
set t9_sh_id [exec pgrep t9.sh]
send_tty "$t9_sh_id\n"
foreach i $t9_sh_id {
exec kill -9 $i
}
send_tty "已删除进程。\n"
exit
}
if $t9_sh_count==1 {
send_tty "无 t9.sh 进程\n"
exit
}
kose5@kose5-Aspire-4552:~$ ./t2.exp
无 t9.sh 进程
kose5@kose5-Aspire-4552:~$
kose5@kose5-Aspire-4552:~$ cat t2.exp
#!/usr/bin/expect
set t9_sh_count [exec ps ax | grep -c t9.sh]
if $t9_sh_count>1 {
set t9_sh_id [exec pgrep t9.sh]
send_tty "$t9_sh_id\n"
foreach i $t9_sh_id {
exec kill -9 $i
}
send_tty "已删除进程。\n"
exit
}
if $t9_sh_count==1 {
send_tty "无 t9.sh 进程\n"
exit
}
kose5@kose5-Aspire-4552:~$ ./t2.exp
无 t9.sh 进程
kose5@kose5-Aspire-4552:~$
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: Expect脚本里我想完成这个功能,提示错误“child process exited abnormally”,
谢谢3楼的同志。
我再看看你的代码。
好像是进程存在就没有错误,进程不存在的时候反而是有错误的。
看看catch。
你能加点注释吗。让大家好理解点。
我再看看你的代码。
好像是进程存在就没有错误,进程不存在的时候反而是有错误的。
看看catch。
你能加点注释吗。让大家好理解点。
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: Expect脚本里我想完成这个功能,提示错误“child process exited abnormally”,
解决如下,
### corosync进程存在,corosync_exist为0
### corosync进程不存在,corosync_exist为1
### 检测当前系统中corosync进程是否存在
set corosync_exist [ catch { exec ps -ef | grep "corosync" | grep -v "grep" | wc -l } ]
### 如果当前系统中corosync进程存在
if { $corosync_exist== 0 } {
### 存在,就把corosync进程赋值给corosync_pid
set corosync_pid [ exec ps -ef | grep "corosync" | grep -v "grep" | awk "{print \$2}" ]
### 杀死corosync_pid进程
foreach i $corosync_pid {
exec kill -9 $i
}
}
### corosync进程存在,corosync_exist为0
### corosync进程不存在,corosync_exist为1
### 检测当前系统中corosync进程是否存在
set corosync_exist [ catch { exec ps -ef | grep "corosync" | grep -v "grep" | wc -l } ]
### 如果当前系统中corosync进程存在
if { $corosync_exist== 0 } {
### 存在,就把corosync进程赋值给corosync_pid
set corosync_pid [ exec ps -ef | grep "corosync" | grep -v "grep" | awk "{print \$2}" ]
### 杀死corosync_pid进程
foreach i $corosync_pid {
exec kill -9 $i
}
}
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: Expect脚本里我想完成这个功能,提示错误“child process exited abnormally”,
谢谢提示catch,学脚本不久,未到全面学指令阶段.
改进如下:
#!/usr/bin/expect
# 检察是否有t9.sh进程,pgrep对进程过滤,由于无匹配进程时catch返回1,所以检察进程总数变为多余,不加-c选项。
set t9_sh_count [catch {exec pgrep "t9.sh"}]
if $t9_sh_count==0 {
# 有进程时catch返回0,此时用pgrep检察所有匹配进程id号,用pgrep只为减少指令数量。
set t9_sh_id [exec pgrep t9.sh]
# 显示检察到的进程id。
send_tty "$t9_sh_id\n"
# 删除所有进程。
foreach i $t9_sh_id {
exec kill -9 $i
}
send_tty "已删除进程。\n"
exit
}
# 无进程时显示。
if $t9_sh_count==1 {
send_tty "无 t9.sh 进程\n"
exit
}
改进如下:
#!/usr/bin/expect
# 检察是否有t9.sh进程,pgrep对进程过滤,由于无匹配进程时catch返回1,所以检察进程总数变为多余,不加-c选项。
set t9_sh_count [catch {exec pgrep "t9.sh"}]
if $t9_sh_count==0 {
# 有进程时catch返回0,此时用pgrep检察所有匹配进程id号,用pgrep只为减少指令数量。
set t9_sh_id [exec pgrep t9.sh]
# 显示检察到的进程id。
send_tty "$t9_sh_id\n"
# 删除所有进程。
foreach i $t9_sh_id {
exec kill -9 $i
}
send_tty "已删除进程。\n"
exit
}
# 无进程时显示。
if $t9_sh_count==1 {
send_tty "无 t9.sh 进程\n"
exit
}
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: Expect脚本里我想完成这个功能,提示错误“child process exited abnormally”,
Expect我虽然看了段时间,但是其实也不太会用。只是工作中有时用到。有空可以多交流。我最近又遇到一个其他问题。由于环境问题所以没有在论坛提出来。
哦 我也学到一个新命令pgrep,以前没怎么用过。 感觉省去了awk,提取pid的时候。
哦 我也学到一个新命令pgrep,以前没怎么用过。 感觉省去了awk,提取pid的时候。
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: Expect脚本里我想完成这个功能,提示错误“child process exited abnormally”,
加个吧,把那个问题问问你。我的msn是[email protected]。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: Expect脚本里我想完成这个功能,提示错误“child process exited abnormally”,
不好意思,我从不用通讯软件,win的lin的都没有。chengmoYS 写了:加个吧,把那个问题问问你。我的msn是[email protected]。

bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40