看板 Perl 關於我們 聯絡資訊
這個 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--; } } ※ 引述《jacky1989 ()》之銘言: : 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
jacky1989: 但檔案一開始就是不存在的,需要等另一隻程式創建才可 06/21 19:19
jacky1989: 以,這樣就得一直在等不是嗎? 06/21 19:19
lgen7604: 你有看懂嗎?每一分鐘檢查檔案,檢查到檔案就算成功,如 07/25 23:37
lgen7604: 果檢查30次(經過30分鐘)都沒有看到檔案,程式timeout 07/25 23:38
lgen7604: 這樣才不會永遠等下去(你原本程式卡死的問題) 07/25 23:39
lgen7604: 你應該要設計一個合理的timeout時間,不是永遠一直等 07/25 23:40
herculus6502: 或是用crontab 07/31 22:24