Có cách nào để ngăn chặn điều này mà không cần khởi động lại máy không?
Điều đó không hoàn toàn là không thể, và bạn có thể làm điều đó thông qua may mắn - tức là, bạn có thể giết tất cả các quy trình trước khi một quy trình khác được sinh ra. 1 Nhưng bạn phải nhận được rất may mắn, vì vậy đó không phải là một nỗ lực đáng tin cậy hay đáng giá [có lẽ slm may mắn hơn tôi ở đây, lol - TBH Tôi đã không cố gắng như vậy] . Nếu bạn chơi xung quanh với các ưu tiên, cơ hội của bạn có thể cải thiện (xem man nice
), mặc dù tôi nghi ngờ điều này cũng sẽ gây rối với hiệu quả của bom ngã ba.
Một ý tưởng tốt hơn có thể là sử dụng một lần mà ra. Để biết ví dụ trong C, xem chú thích số 5 cho câu trả lời của tôi ở đây . 2 Bạn có thể làm điều tương tự với tập lệnh shell, mặc dù sẽ không ngắn như :(){ :|:& };:
:
#!/bin/bash
export fbomb_duration=$1
export fbomb_start=$(date +%s)
go () {
now=$(date +%s)
if [[ $(($now-$fbomb_start)) -gt $fbomb_duration ]]
then exit 0;
fi
go &
}
while ((1)); do
go
done
Thực hiện điều đó với một đối số, một số giây. Tất cả các dĩa sẽ chết sau thời gian đó.
1 Trên thực tế, cuối cùng, nó có thể tự xảy ra nếu kẻ giết người OOM hạt nhân gặp may mắn. Nhưng đừng nín thở.
2 Phương pháp được sử dụng ở đó để gân kheo quả bom cụ thể đó (bằng cách cài đặt vm.overcommit_memory=2
) gần như chắc chắn sẽ không hoạt động nói chung, nhưng bạn có thể thử. Tôi không muốn rời khỏi hệ thống của mình bây giờ;)