Tôi muốn bắt đầu một chương trình với SSH bằng PHP, nó hoạt động tốt, nhưng bây giờ tôi muốn giết màn hình bằng PHP, nhưng điều duy nhất tôi biết là tên của màn hình. Làm cách nào để tìm ID màn hình (tự động)?
Tôi muốn bắt đầu một chương trình với SSH bằng PHP, nó hoạt động tốt, nhưng bây giờ tôi muốn giết màn hình bằng PHP, nhưng điều duy nhất tôi biết là tên của màn hình. Làm cách nào để tìm ID màn hình (tự động)?
Câu trả lời:
Bạn có thể sử dụng biến môi trường $STY
để xác định xem bạn có tham gia phiên màn hình hay không và tên của phiên là gì trong đó.
Ban đầu, chúng tôi đang ngồi trong một cửa sổ đầu cuối, không phải trong một phiên màn hình.
$ echo $STY
$
Quay lên một phiên màn hình:
$ screen -ls
There is a screen on:
31543.tscrn (Detached)
1 Socket in /var/run/screen/S-saml.
Kết nối với nó:
$ screen -r 31543.tscrn
Phiên màn hình bên trong:
$ echo $STY
31543.tscrn
$
Với tên của phiên bạn có thể giết nó bằng cách sử dụng screen
.
$ screen -X -S tscrn kill
Bạn cũng có thể sử dụng số đó.
$ screen -X -S 31543 kill
Xác nhận rằng nó đã bị giết:
$ screen -ls
No Sockets found in /var/run/screen/S-saml.
Bạn có nghĩa là screen
chương trình? screen -ls
sẽ liệt kê các quy trình màn hình cùng với tên màn hình của chúng, được đặt trước bởi PID mà chúng đang chạy từ:
screen -S foo
screen -ls
There are screens on:
8806.foo (09/08/13 20:05:22) (Attached)
Bạn có thể sử dụng nó để giết tiến trình:
kill -15 $(screen -ls | grep '[0-9]*\.foo' | sed -E 's/\s+([0-9]+)\..*/\1/')
Ngoài ra, nếu bạn có thể xác định quy trình php bằng ps, thì id cha của nó sẽ là màn hình và bạn có thể giết nó. pgrep -U <myusername> -f <name>
sẽ giúp tìm quá trình php mà bạn muốn tìm (lưu ý -f
tìm kiếm các đối số lệnh cũng như tên lệnh). Bạn có thể đang chạy nhiều hơn một tập lệnh php, vì vậy -f
sẽ là một cơ chế tốt hơn để phù hợp với quy trình của bạn. <myusername>
sẽ là tên người dùng của bạn, <name>
sẽ là một chuỗi để khớp với quy trình. Sau đó, bạn có thể sử dụng ps -p <pid> -o ppid=
để lấy ID tiến trình màn hình và giết nó.
kill -15 $( ps -p $(pgrep -U fooman -f foobar_process) -o ppid= )
screen
hayDISPLAY
?