2012-05-07 18 views
6

Tôi đang làm việc trên Linux, tôi đã thực hiện các vòng lặp for trên một thiết bị đầu cuối Linux như sau:Làm thế nào để giết một chạy cho vòng lặp trên Linux?

for i in `cat fileName.txt` 
do 
echo $i 
vim $i 
done 

filename.txt là một file chứa lớn không có các mục tập tin mà tôi đang mở trong vim chỉnh sửa từng cái một. Bây giờ tôi phải bỏ qua mở các tập tin khác ở giữa (tức là tôi phải phá vỡ vòng lặp for). Bất cứ đề nghị làm thế nào để có được PID chạy cho vòng lặp? và giết như vậy. Cảm ơn trước.

+0

Nếu bạn sử dụng PID và giết nó, thì toàn bộ tập lệnh của bạn sẽ kết thúc, không chỉ vòng lặp. 'ps -A | grep YOUR_SCRIPT_NAME' phải cung cấp cho quy trình của bạn và ID của nó –

+0

Bạn có muốn xóa tệp mà bạn đã mở hay không. Nói fileName.txt có các mục như 1.txt 2.txt 3.txt sau đó khi u mở 1.txt, u muốn giết quá trình đó? Đúng không ? – m4n07

+0

@Pavan Cảm ơn nhưng tôi đang thực hiện vòng lặp for trên chính thiết bị đầu cuối chứ không phải trong bất kỳ tập lệnh nào. – BSalunke

Trả lời

1

này cũng có thể làm các trick:

while true ; do killall vim ; done 

Bạn có thể hủy bỏ cái này với^C như bình thường.

+0

Không có lỗi nào có nghĩa là vim (22400): Hoạt động không được phép – BSalunke

+0

Bạn có đang chạy điều này dưới cùng một người dùng làm vòng lặp sinh ra tất cả các vims không? Ngoài ra, một người khác có thể đang chạy vim cùng một lúc trên cùng một máy, trong trường hợp đó bạn có thể bỏ qua lỗi. 'killall' vẫn sẽ giết bất cứ điều gì có thể. – Thomas

9

Bạn muốn xóa hoạt động công việc. Nhấn CtrlZ. Bash sẽ hiển thị một cái gì đó như:

[1]+ Stopped     vim $i 

Sử dụng con số đó với kill để gửi KILL tín hiệu:

kill -9 %1 

và nó sẽ bị giết sau:

[1]+ Killed     vim $i 
+0

Đây là cách duy nhất tôi đã tìm thấy để làm việc cho giết chết một vòng lặp vỏ trong một thiết bị đầu cuối chứ không phải là một kịch bản. Cảm ơn, tôi không thể tìm thấy cú pháp% n ở nơi khác. – andybuckley

1

Tìm quá trình id (PID) của cha mẹ của quá trình vim, mà nên được trình bao thực hiện vòng lặp for. Hãy thử sử dụng "pstree -p". Sau đó, hãy giết id quá trình đó bằng cách sử dụng "kill".

0

Để chấm dứt việc tạo quy trình vim, bạn phải dừng vòng lặp for. Vòng lặp này được quản lý bởi một quá trình bash. Vì vậy, tìm PID của quá trình và giết nó. Để làm như vậy, hãy tìm PPID của quy trình vim, là PID của quy trình gốc và chấm dứt quy trình gốc: ps -elf | tr -s ' ' | grep vim | cut -f5 -d ' ' | xargs kill

Bạn có thể sử dụng lệnh này với lệnh thứ hai, sẽ giết tất cả các quy trình vim, để đảm bảo không còn tồn tại vim: ps -elf | tr -s ' ' | grep vim | cut -f4 -d ' ' | xargs kill

Tôi thấy rằng bạn gặp sự cố với "không được phép". Điều này có thể do thiếu sự cho phép, vì vậy để chắc chắn rằng nó sẽ giết chết các quá trình, bạn có thể gọi xargs kill bằng sudo: ps -elf | tr -s ' ' | grep vim | cut -f5 -d ' ' | sudo xargs kill

Các vấn đề liên quan