2011-08-24 41 views

Trả lời

16
exec("ps auxwww|grep sample.php|grep -v grep", $output); 

Điều này sẽ chỉ hoạt động nếu PHP đang chạy ở chế độ CGI. Nếu nó chạy như một loại SAPI, bạn sẽ không bao giờ thấy "sample.php" trong danh sách quy trình, chỉ cần 'httpd'.

+0

Cảm ơn bạn nó hoạt động, nhưng những con số được hiển thị ở đây là gì? '1025 19622 0.0 0.0 5336 1308? S 02:15 0:00 wget -q http: // www.example.com/sample.php' –

+0

id tiến trình cha, ID tiến trình, cách sử dụng CPU, mức sử dụng bộ nhớ, v.v ... xem 'man ps' để biết chi tiết . –

+0

Thanx @Marc cho câu trả lời của bạn –

0

Không có. Bởi vì PHP được chạy qua apache/nginx. Trong trường hợp truy cập dòng lệnh, proccess được đặt tên là PHP, không phải tên thực tế của tập lệnh của bạn.

0

Tùy thuộc vào nhiều yếu tố bao gồm OS, phiên bản PHP, v.v., nhưng bạn có thể thử sử dụng tín hiệu để lấy tập lệnh để đặt tên và sau đó chấm dứt nếu nó khớp. Hoặc, có kịch bản đăng ký pid của nó và sau đó so sánh với các tiến trình đang chạy.

http://stuporglue.org/handling-signals-in-php/

0

điều này đã giúp tôi giết các quy trình lừa đảo thông qua tham số url. tôi đã hình dung tôi sẽ đóng góp vào cuộc thảo luận trong trường hợp một người khác vẫn đang tìm kiếm câu trả lời.

tải yikes.php. xác định id quá trình (nó phải là số nguyên đầu tiên bạn đến trong mỗi chỉ mục của mảng). sao chép và dán nó vào url dưới dạng? pid = XXXXX. và nó đã biến mất.

//http://website.com/yikes.php?pid=668 
$pid = $_GET['pid']; 
exec("ps auxwww|grep name-of-file.php|grep -v grep", $output); 
echo '<pre>'; 
print_r($output); 
echo '</pre>'; 
// 
exec("kill $pid"); 
Các vấn đề liên quan