[問題] 程式只能執行一次的問題

看板Linux作者 (總是很多心事)時間12年前 (2013/09/09 10:45), 編輯推噓0(0027)
留言27則, 5人參與, 最新討論串1/1
請問 Linux 能否讓相同程式同時間只執行一個 不能執行多個? 感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.65.122

09/09 11:59, , 1F
如果只是怕user不小心多點icon,用Ubuntu的unity launcher
09/09 11:59, 1F

09/09 11:59, , 2F
或許符合需求,但只能防不太懂的人而以
09/09 11:59, 2F

09/09 12:50, , 3F
如果是防同個user用太多資源,可以在cgroup設各種上限
09/09 12:50, 3F

09/09 14:10, , 4F
只有我自己要執行 有個東西一段時間會執行一次
09/09 14:10, 4F

09/09 14:10, , 5F
但若執行時前一次的還沒跑完 表示時間內跑不完
09/09 14:10, 5F

09/09 14:11, , 6F
這樣的話會累積愈來愈多
09/09 14:11, 6F

09/09 14:32, , 7F
寫個script當frontend,先檢查ps結果
09/09 14:32, 7F

09/09 14:43, , 8F
這種傳統做法是程式一執行就 create lock檔並寫入自己的
09/09 14:43, 8F

09/09 14:44, , 9F
pid,其它程式發現create檔案已存在而failed時,檢查lock內
09/09 14:44, 9F

09/09 14:44, , 10F
的pid是否還在run,若是則exit,若否則移除lock,重頭再一次
09/09 14:44, 10F

09/09 14:45, , 11F
這種作法適用範圍極廣,包括多台機器只準一個process,此時
09/09 14:45, 11F

09/09 14:45, , 12F
lock檔可建在nfs目錄
09/09 14:45, 12F

09/09 17:40, , 13F
請問有可以參考的 C code 嗎? 感恩
09/09 17:40, 13F

09/09 17:51, , 14F
一時沒有,但重點只有creat 而以, man creat 2 用裏面的
09/09 17:51, 14F

09/09 17:53, , 15F
O_CREAT 其它就是照推文的演算法,應該還好,檢查process就
09/09 17:53, 15F

09/09 17:55, , 16F
對它送CONT看在不在,細節看 man kill 2 ,大概是這樣
09/09 17:55, 16F

09/10 07:28, , 17F
如果只有自己用的話 用script抓一下ps結果比較簡單
09/10 07:28, 17F

09/10 11:34, , 18F
再請問一下有沒有可能不同程式用到相同的 pid?
09/10 11:34, 18F

09/10 13:14, , 19F
同一機器內不可能有2個process的pid相同
09/10 13:14, 19F

09/10 13:15, , 20F
除非pid繞了一圈,前一個死了,第2個是用到繞一圈後的
09/10 13:15, 20F

09/10 13:19, , 21F
不好意思 意思是程式結束後該pid無人使用 有沒有可能其他
09/10 13:19, 21F

09/10 13:20, , 22F
程式開啟後用到該 pid,我的程式又再啟動去檢查該 pid
09/10 13:20, 22F

09/10 13:21, , 23F
發現有人在用,但卻不是我的程式?
09/10 13:21, 23F

09/10 13:23, , 24F
我的程式若可以在時間內跑完就會結束 繼續等下一次的執行
09/10 13:23, 24F

09/10 17:27, , 25F
pid是嚴格遞增,到了上限再繞回來
09/10 17:27, 25F

09/11 10:06, , 26F
前面忘了講一點,程式正常結束前要自己刪除lock檔,其它程式
09/11 10:06, 26F

09/11 10:07, , 27F
中第一個一開始就可以順利開始執行
09/11 10:07, 27F
文章代碼(AID): #1IBJPNv7 (Linux)