У меня есть сценарий удара, работающий как su крон каждые 10 минут. Вдобавок к сценарию я объявляю:
#!/bin/bash
В crontab я выполняю его с/bin/bash. Я делаю то же со всеми сценариями, названными из моего основного сценария.
Я заметил, что создаются два потока:
/bin/bash /main/script
/bin/sh -c /main/script
Также все другие сценарии, которые называют, получают свой собственный единственный поток (только удар).
Вы могли объяснить это поведение мне?
Крон использует оболочку для выполнения команд. В случае того пользователя это /bin/sh
, таким образом для строки как:
* * * * * /bin/bash /some/script
Выполнения крона:
/bin/sh -c '/bin/bash /some/script'
Если набор оболочки был /bin/bash
, это работало бы:
/bin/bash -c '/bin/bash /some/script
Теперь, почему Вы не видите bash -c
процесс с ударом? Bash при предоставлении единственной, простой команды, непосредственно exec
s команда вместо fork
луг и exec
луг:
$ strace -fe clone,execve bash -c 'bash foo.sh'
execve("/bin/bash", ["bash", "-c", "bash foo.sh"], [/* 15 vars */]) = 0
execve("/bin/bash", ["bash", "foo.sh"], [/* 15 vars */]) = 0
clone(Process 466 attached
child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f93bda10a10) = 466
[pid 466] execve("/bin/true", ["/bin/true"], [/* 15 vars */]) = 0
[pid 466] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=466, si_status=0, si_utime=0, si_stime=0} ---
+++ exited with 0 +++
С dash
, который является /bin/sh
:
$ strace -fe clone,execve dash -c 'bash foo.sh'
execve("/bin/dash", ["dash", "-c", "bash foo.sh"], [/* 15 vars */]) = 0
clone(Process 473 attached
child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f7f31650a10) = 473
[pid 473] execve("/bin/bash", ["bash", "foo.sh"], [/* 15 vars */]) = 0
[pid 473] clone(Process 474 attached
child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f408d740a10) = 474
[pid 474] execve("/bin/true", ["/bin/true"], [/* 15 vars */]) = 0
[pid 474] +++ exited with 0 +++
[pid 473] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=474, si_status=0, si_utime=0, si_stime=0} ---
[pid 473] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=473, si_status=0, si_utime=0, si_stime=0} ---
+++ exited with 0 +++
Вы видите дополнительный клон здесь.