我每 30 秒運行一次 CRON,但這屬於該crond
過程,對嗎?sh
當沒有人執行 Shell 腳本時,為什麼指令會佔用我 50% 的 CPU?
答案1
Cron 將使用 運行命令欄位中指定的命令sh -c
。您可以透過在 crontab 檔案中設定 SHELL 來指定另一個 shell。
編輯:
澄清一下,該sh -c
命令將作為 cron 的子進程運行,這可能會根據給定的命令產生其他子進程。
答案2
crond
在我熟悉的每個系統上以 root 身分運行:
1016 % ps -ef | grep crond
root 342 1 0 12:37 ? 00:00:00 /usr/sbin/crond
這是在相當目前的 Arch 安裝上,但舊的 Slackware 也說了同樣的事情。如果您作為某個非 root 使用者編寫了 crontab 文件,crond
將以您的非 root 使用者 ID 執行命令。多年來,根所有權一直是導致幾個重大安全問題的原因。
就使用 50% 的 CPU 而言,每 30 秒運行一次重量級任務很容易就會消耗 50% 的 CPU。我認為,大量的“globbing”可以做到這一點,就像進行大量 sh 內建字串模式匹配或算術一樣。