在bash脚本中找到ftp transfer的pid

时间:2013-08-05 14:57:58

标签: bash ftp solaris pid

我想在bash脚本中获取ftp的pid ...在solaris上运行

这是我的剧本:

#!/usr/bin/bash
...
ftp -inv $FTPDEST <<EOF
user $USER $PASS
put $file
EOF

我想得到ftp命令的pid,以便我可以检查它是否挂起并将其杀死.. 我有服务器崩溃,因为当ftp切断连接时,大约有200 ftp进程打开..由于某种原因,ftp进程保持打开状态。

谢谢你 马里奥

1 个答案:

答案 0 :(得分:0)

这就是您所描述的内容,但可能并不是您所需要的。这是一种黑客......

#!/usr/bin/bash
trap 'exit 0' SIGUSR1   # this is the normal successful exit point

 # trigger the trap if ftp in a background process completes before 10 seconds    
(ftp -inv $FTPDEST <<-EOF 2>>logfile
user $USER $PASS
put $file
EOF 
kill -s SIGUSR1 $PPID ) &   # last line here shuts process down.  and exits with success

childpid=$!    # get the pid of the child running in background
sleep 10       # let it run 10 seconds

kill $childpid # kill off the ftp command, hope we get killed of first
wait
exit 1    # error exit ftp got hung up

父母等待10秒,而ftp孩子在不到10秒的时间内完成以便成功退出 成功意味着孩子向父母发送SIGUSR1信号,然后通过陷阱退出。

如果孩子花了太长时间,父母就会杀死缓慢的ftp孩子并退出并出错。