Làm thế nào để tắt file thực thi trong PHP sử dụng exec

Trong file python e có sử dụng vòng lặp while, em không biết soa để cho nó dừng lại.
Chương trình em chỉ chạy đúng lần đầu tiên sau khi khởi động.
Các anh giúp em với.
Em cảm ơn.

<?php
if (isset($_POST['chedo1']))
{
exec ("sudo python /var/www/html/3ledblink.py")
}
?>

Muốn kill 1 process trong Linux thì cần biết PID (Process ID) của nó. Do đó, bạn cần đổi câu lệnh thực thi lại 1 chút.

$pid = exec("sudo python /var/www/html/3ledblink.py >/dev/null 2>&1 & echo $!");

Sau đó kill:

exec("kill -9 $pid");

Nguồn tham khảo:


2 Likes

em đã làm như anh nói
nhưng vẫn không được anh :frowning:

Bước đầu tiên là bạn cần in biến $pid ra trình duyệt/terminal xem biến đó có thực sự có giá trị không.

Bước tiếp theo là vào terminal gõ

ps -x | grep <pid>

Với <pid> là giá trị của biến $pid bạn có được. Ví dụ:

ps -x | grep 12345

Xem có tiến trình nào như vậy không

1 Like

Là cái PID này hả anh?
Em không copy được nên e chụp hình luôn.

Cột đầu tiên bên trái chính là PID.

1 Like

Ụa anh ơi.
Sao e dùng 1 lệnh nhưng trong 2 terminal khác nhau, 1 cái khí sau khi e PUTTY và 1 cái là e remote desktop. Kết quả là nó ra 2 cái PID khác nhau.
Vậy e dùng cái nào thì đc anh?

Và sau khi em làm như a nói thì chạy lại file trên giao diện thì LED không sáng luôn

2 session khác nhau thì nó phải có 2 PID khác nhau chứ

1 Like

Nếu vậy bạn phải kiểm tra lại file .py có bị lỗi ko trước khi chạy trung gian qua PHP.

1 Like

Da, file python van chay bthuong anh.

Và sau đó bạn execute file python bằng PHP, mọi việc ổn. Dùng pid thu được và kill nó thì có điều kì lạ xảy ra?

Em không hiểu ý anh lắm ạ.

Vấn đề của bạn là chạy trực tiếp file python thì ok nhưng thông qua PHP thì fail hay chạy thông qua PHP vẫn ok nhưng khi kill process thì gặp sự cố?

Dạ. vấn đề của em là:
Chạy file python thì ok.
Khi chạy thông qua PHP thì chỉ chạy đúng lần đầu tiên thôi, những lần sau thì chạy không đúng nữa.
Lúc e làm như a nói trên, lúc e chưa kill process thì nó cũng chạy như cũ, không thay đổi gì.
Sau khi e kill process thì mở python qua PHP thì k chạy nữa.

Giờ em phải làm sao đây anh :cry:

Vậy sau khi kill thì bạn chạy lại execute dạng:

$pid = exec("sudo python /var/www/html/3ledblink.py > <path_to_log_file>");

Với <path_to_log_file> là 1 file text bạn tạo ra cho quyền ghi / sửa xem rút cuộc nó bị lỗi gì.

Lưu ý: Hạn chế không dùng sudo.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?