Re: [問題] sleep與-e搭配應用

看板 Perl
作者 lgen7604 ()
時間 2025-06-19 05:05:21
留言 0則留言 (0推 0噓 0→)

這個 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--; } } : 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

您可能感興趣