Cp
無論如何都會失敗/延遲 cp 程序?
這是一個假設的場景。假設我有一個特定的文件夾,該文件夾正在由通過 Internet 接收文件/文件夾的程序同步。現在,當這個操作正在進行時,為了同步器的緣故,它的目錄不應該有 cp 操作。無論如何,這可以實現嗎?
至少有兩種可能的解決方案:
- 為 cp 創建一個包裝腳本,檢查同步是否正在執行,方法是檢查程序是否正在執行或測試鎖定文件,然後中止或延遲操作。
- 用於
LD_PRELOAD
掛斷電話write
和其他電話。第一個解決方案的問題是您必須將用於寫入的所有命令包裝到文件夾中,例如
mv
,cp
,rsync
,rm
,ln
,cat
… 另一方面,它非常簡單,但也僅適用於您目前的使用者。對於第二種解決方案,您必須編寫一個共享庫,其中包含用於更改/修改目錄的所有系統呼叫,例如
write
,unlink
,rename
。但這個解決方案適用於所有動態連結的執行檔——因此無需調整所有其他程序。
如果您知道同步程序正在執行並且知道唯一可能的操作是
cp
,那麼您可以發送SIGSTOP
到所有程序以暫停執行。同步完成後,您發送SIGCONT
到所有程序以繼續。為此,您可以使用
kill -s SIGSTOP $(pidof cp)
或killall -s SIGSTOP cp
。在終端中,您可以使用Ctrl
+Z
將任務置於後台(“暫停”)。要繼續執行,請使用fg
命令(“前台”,請參閱help fg
)。