Назад | Перейти на главную страницу

Почему strace возвращает так много вызовов execve с кодом возврата ENOENT?

Я хотел использовать strace, чтобы увидеть, что происходит, когда я выполняю `hadoop fs -ls ', поэтому я выполнил команду:

strace -f -e trace=execve hadoop fs -ls /stg что привело к большому количеству таких результатов:

[pid 187050] execve("/opt/sas/app/platform/lsf/8.0/linux2.6-glibc2.3-x86_64/etc/setsid", ["setsid", "bash", "-c", "echo $$"], [/* 78 vars */]) = -1 ENOENT (No such file or directory)
[pid 187050] execve("/opt/sas/app/platform/lsf/8.0/linux2.6-glibc2.3-x86_64/bin/setsid", ["setsid", "bash", "-c", "echo $$"], [/* 78 vars */]) = -1 ENOENT (No such file or directory)
[pid 187050] execve("/opt/dca/bin/setsid", ["setsid", "bash", "-c", "echo $$"], [/* 78 vars */]) = -1 ENOENT (No such file or directory)
[pid 187050] execve("/usr/local/greenplum-cc-web/./bin/setsid", ["setsid", "bash", "-c", "echo $$"], [/* 78 vars */]) = -1 ENOENT (No such file or directory)
[pid 187050] execve("/usr/lib64/qt-3.3/bin/setsid", ["setsid", "bash", "-c", "echo $$"], [/* 78 vars */]) = -1 ENOENT (No such file or directory)
[pid 187050] execve("/usr/local/bin/setsid", ["setsid", "bash", "-c", "echo $$"], [/* 78 vars */]) = -1 ENOENT (No such file or directory)
[pid 187050] execve("/bin/setsid", ["setsid", "bash", "-c", "echo $$"], [/* 78 vars */]) = -1 ENOENT (No such file or directory)
[pid 187050] execve("/usr/bin/setsid", ["setsid", "bash", "-c", "echo $$"], [/* 78 vars */]) = 0

Почему было так много -1 ENOENT (No such file or directory) полученные результаты?

Он пытается запустить программу, вызывая каждое потенциальное место в $PATH-заказ без предварительного знания того, где находится программа. Это совершенно нормально, потому что делать что-то вроде stat() затем execve() в лучших практиках безопасности во многих магазинах программного обеспечения считается состоянием гонки.