Làm thế nào để tôi giết tất cả các màn hình?


76

Tôi vô tình tạo ra hơn 1000 màn hình. Làm thế nào để tôi giết tất cả chúng bằng một lệnh? (Hoặc một vài)


3
chạy ->screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
sactiw

Ý kiến ​​hay @sactiw. Tôi đã sửa đổi nó để hoạt động với các phiên được đặt tên của mình và điều chỉnh các lệnh một chút theo sở thích, làm sạch hoàn toàn các phiên trong trường hợp chúng bị 'kẹt' giống như chúng dành cho tôi và liệt kê lại cho người dùng dưới dạng kiểm tra độ tỉnh táo:screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Pysis

3
Làm thế nào bạn vô tình tạo ra 1000 màn hình?
duhaime

Câu trả lời:


95

Bạn có thể dùng :

pkill screen

Hoặc là

killall screen

Trong OSX, quá trình này được gọi là SCREEN trong tất cả các mũ. Vì vậy, sử dụng:

pkill SCREEN

Hoặc là

killall SCREEN

2
Không nên sử dụng SIGKILL trong trường hợp này. SIGTERM sẽ là một lựa chọn tốt hơn nhiều.
Marco

Xin chào, Rahul Patil. tại sao màn hình không được liệt kê trongTop
user15964

Nếu tôi không có quyền thì sao? Tôi có phải tự đi vào và thoát tất cả các màn hình không?
hipoglucido

13

Nếu màn hình đã chết, sử dụng:

screen -wipe

6
str=$(screen -ls)  

array=$(echo $str|tr "." "\n")  

for V in $array  
do  
if [ $V -gt 0  ]  
        then screen -S $V -X quit  
fi  
done 

5

Gần đây đã bắt đầu làm quen với awk, tôi kết hợp nó và nó phục vụ mục đích của nó. Tôi đã đăng nó vì nó khá dễ hiểu.

screen -ls | grep '(Detached)' | awk 'sys {screen -S $1 -X quit}'

Nơi screen -lsliệt kê tất cả các màn hình hiện tại. grep 'pattern'lọc ra tất cả các hàng phù hợp. Sau đó chúng ta có thể xử lý tất cả các màn hình tách rời và với awk sys {command}chúng ta có thể sao chép và dán cùng một lệnh và thực thi nó sys, $1tham chiếu đến đối số đầu tiên được chọn bởi awk. Cuối cùng chúng ta thực hiện lệnh thoát với screen -X quit.


1
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit làm việc tốt hơn cho tôi
wherealuext

2

Tôi hơi bối rối về cách bạn quản lý để tạo 1000 "màn hình". Có lẽ bạn có nghĩa là 1000 cửa sổ màn hình (1000 cửa sổ đầu cuối khác nhau trong một phiên màn hình)?

Nếu bạn có nghĩa là 1000 cửa sổ trong một phiên màn hình duy nhất, thì một giải pháp thanh lịch hơn sẽ là thoát khỏi màn hình bằng lệnh C-a \(ctrl-a theo sau là \).


1
Hãy thử thực hiện màn hình 1000x trong màn hình. Chuyện gì xảy ra Bạn nhận được 1000 cửa sổ màn hình. Vâng, đúng vậy, màn hình thông minh và nhân hậu không sinh ra 1000 phiên màn hình. Vì vậy, nếu OP đã khởi động màn hình, việc vô tình khởi động 1000 cửa sổ màn hình sẽ dễ dàng hơn nhiều so với bắt đầu 1000 phiên màn hình.
Railgun2

Lạ nhưng bình luận tôi đang trả lời dường như đã biến mất. Dù sao tôi đang để cho nhận xét trên đứng cho hồ sơ.
Railgun2

1
Vâng, nó thực sự khá đơn giản. Chỉ cần tạo một vòng lặp vô hạn (một cách tình cờ) và đặt một cái gì đó như thế này vào đó screen -m sleep 100000. Điều này đã xảy ra và tôi đã không nhận thấy cho đến khi nó đã tạo ra hơn 1000 phiên màn hình.
BrainStone

0

Lệnh sau sẽ chấm dứt tất cả các màn hình không hoạt động:

perl -e 'while (map { kill 9, [split /\./]->[0] } grep { /Detached/ } split /\n/, qx{screen -ls}) { sleep 1 } exec qw(screen -wipe)'

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.