01/10/2018, 12:14

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") } ?>
Son Tran viết 14:27 ngày 01/10/2018

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:

stackoverflow.com
Mitchell Bennett

PHP exec() not storing Process ID

php, linux, process, exec
asked by Mitchell Bennett on 09:22AM - 18 Nov 14

stackoverflow.com
kishan

How to kill a linux process using pid from php?

php, linux, apache, amazon-ec2
asked by kishan on 05:35AM - 08 Oct 13

Võ Thị Hoài Thu viết 14:24 ngày 01/10/2018

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

Son Tran viết 14:21 ngày 01/10/2018

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

Võ Thị Hoài Thu viết 14:19 ngày 01/10/2018

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

Son Tran viết 14:16 ngày 01/10/2018

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

Võ Thị Hoài Thu viết 14:22 ngày 01/10/2018

Ụ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õ Thị Hoài Thu viết 14:19 ngày 01/10/2018

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

Dark.Hades viết 14:23 ngày 01/10/2018

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.

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

Son Tran viết 14:20 ngày 01/10/2018

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.

Võ Thị Hoài Thu viết 14:25 ngày 01/10/2018

Da, file python van chay bthuong anh.

Son Tran viết 14:15 ngày 01/10/2018

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?

Võ Thị Hoài Thu viết 14:27 ngày 01/10/2018

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

Son Tran viết 14:16 ngày 01/10/2018

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ố?

Võ Thị Hoài Thu viết 14:30 ngày 01/10/2018

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.

Võ Thị Hoài Thu viết 14:22 ngày 01/10/2018

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

Son Tran viết 14:23 ngày 01/10/2018

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.

Bài liên quan
0