Я думаю, что проблема у Вас может быть, может быть с Линукс разрешений, более проблема linux, чем PHP?
PHP работает под отдельной учетной записью пользователя. (попробуйте команду whoami). В моей системе имя пользователя apache вместо обычной учетной записи пользователя для программ PHP и Apache. Попробуйте это:
<?php
var_dump(shell_exec('whoami'));
Я использовал var_dump вместо эха, чтобы мы могли видеть, какие нескалярных тип данных, которые могут быть возвращены в случае необходимости (See here).
Теперь ... Скорее всего, ваша проблема заключается в том, что при запуске списка процессов из учетной записи, отличной от root, он предоставит вам список процессов, связанных с вашей учетной записью. Я столкнулся с этой проблемой, когда создавал приложение для мониторинга системы для работы. Если вы выполняете список процессов из корня или используете sudo, теоретически вы должны получить каждый процесс.
Решение, однако, является NOT для sudo вашей учетной записи веб-сервера - это было бы серьезным недостатком безопасности. Решение состоит в том, чтобы найти другой способ сделать то, что вы хотите сделать. Для меня я смог создать скрипт bash, который запускался каждую минуту с помощью задания cron, которое захватывало всю необходимую информацию и сохраняло бы ее в формате JSON в файл, доступный веб-серверу.
Что именно вы пытаетесь достичь?
EDIT: Я заметил в ответ на другой ответ, что вы получаете результаты при вызове скрипта из PHP в терминале. Это связано с тем, что вы будете запускать PHP с теми же правами, что и ваша учетная запись, то есть PHP выполняет команду pgrep в качестве учетной записи пользователя. Вы должны увидеть точно такие же результаты с PHP, что и при его ручном запуске.
А как насчет просто 'checkstatus.php' напрямую? – Class
Если я нажму checkstatus.php прямо из браузера, то он все равно ничего не дает. Кроме того, я хотел бы использовать этот подход, чтобы поддерживать код в чистоте и легко поддерживать – user3780616
Итак, это действительно просто проблема php? –