0

bash スクリプト内で ftp の pid を取得したいのですが、solaris で実行しています。

これは私のスクリプトです:

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

ftpコマンドのpidを取得して、ハングしているかどうかを確認してから終了できるようにしたいと思います.ftpが接続を切断していたときに約200のftpプロセスが開いていたため、サーバーがクラッシュしました.. ftp プロセスが開いたままになっている理由。

ありがとうマリオ

4

1 に答える 1

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 の子を強制終了し、エラーで終了します。

于 2013-08-07T02:46:42.787 に答える