※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1750280723.A.0D3.html
Re: [問題] sleep與-e搭配應用
看板 | Perl |
---|---|
作者 | lgen7604 () |
時間 | 2025-06-19 05:05:21 |
留言 | 0則留言 (0推 0噓 0→) |
: as title
: 我寫一段簡單程式去判斷檔案是否存在
: 如果存在就做下一步這樣
: wait.pl
: #!/usr/bin/perl
: while(1){
: if(-e $ARGV[0]){
: printf("File exist.\n");
: exit;
: }
: sleep(60);
: }
: 我自己使用沒問題,但同仁用了以後我就被公司的IT部門碎念了
: 他說我的程式卡住執行緒,要我修改
: 但我自己左看右看,應該都沒問題
: 以top檢查,也是沒有卡住
: 但以ps檢查就出現一堆死掉的執行緒
: 我這樣檢查 ps -aef|grep wait.pl
: 由於我們是許多台server串起來使用
: 所以檔案不一定在本機硬碟
: 有可能檔案還symbollic link到其他硬碟去
: 所以實際執行可能會這樣打
: /server3/disk1/userA/bin/wait.pl /server1/disk0/dir1/list.log
: list.log這個檔案可能是存在server2的disk2這樣
: 所以會變成
: list.log -> /server2/disk2/list.log
: 因此我想問,我這樣想法會造成卡住執行緒的問題嗎?
: 先感謝大家,如果看不懂,我再補充
--
※ 批踢踢實業坊(ptt.cc), 來自: 106.1.234.17 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1750280723.A.0D3.html
這個 script 的設計不好,如果檔案不存在,無窮迴圈有可能卡死。
建議要設計合理的 timeout 機制,範例如下:
#!/usr/bin/env perl
my $timer = 30; # timeout after 30 min
while (1) {
if (-e $ARGV[0]) {
printf("File exist.\n");
exit 0;
}
else {
if ($timer == 0) {
print "File does not exist, timeout.\n";
exit 1;
}
sleep(60);
$timer--;
}
}
※ 文章網址: https://www.ptt.cc/bbs/Perl/M.1750280723.A.0D3.html