Tôi nên làm gì khi gặp lỗi 'Có công việc bị dừng'?


62

Tôi phải đối mặt với loại tình huống này nhiều lần.

Ví dụ: bất cứ khi nào tôi cố gắng mở một số tệp emacsbằng sudoquyền sử dụng:

sudo emacs tet.c &

Thay vì hỏi tôi mật khẩu, Ubuntu chỉ bắt đầu emacsxử lý mà không có bất kỳ emacscửa sổ hoặc bất kỳ đầu ra nào trên thiết bị đầu cuối (ngoại trừ pid) xem hình ảnh (nếu tôi không sử dụng '&' thì nó sẽ hỏi tôi mật khẩu):

nhập mô tả hình ảnh ở đây

Tôi có hai câu hỏi liên quan đến điều này:

  1. Tôi nên làm gì khi gặp lỗi 'Có công việc bị dừng'? Làm thế nào để tôi xác định tất cả các công việc đã dừng như vậy và giết chúng? Khi tôi xóa thiết bị đầu cuối, tôi sẽ không có các quy trình dừng này.

  2. Tại sao Ubuntu / emacs hoạt động như thế này? Tại sao nó không hỏi tôi mật khẩu?

Câu trả lời:


77

There are stopped jobstin nhắn là xa, rất xa là một lỗi. Đó chỉ là một thông báo cho bạn biết rằng bạn đang cố thoát khỏi trình bao, nhưng bạn có một hoặc nhiều công việc / chương trình bị đình chỉ (trong trường hợp emacsbạn đã đưa vào nền bằng cách sử dụng &ở cuối lệnh). Hệ thống không cho phép bạn thoát khỏi trình bao và giết các công việc trừ khi bạn có ý định. Bạn có thể làm một vài điều để đáp lại thông điệp này:

  • sử dụng jobslệnh để cho bạn biết những công việc bạn đã bị đình chỉ
  • bạn có thể chọn thêm (các) công việc vào nền trước bằng cách sử dụng fglệnh
  • nếu bạn không quan tâm nếu (các) công việc sẽ chấm dứt, bạn chỉ cần gõ exitlại; gõ exitlần thứ hai có hoặc không có jobslệnh can thiệp sẽ dẫn đến việc chấm dứt tất cả các công việc bị đình chỉ.

Để trả lời câu hỏi thứ hai, tôi sẽ nói với bạn rằng không phải Ubuntu hay emacs hành xử như thế này. Đây là một hành vi bình thường khi bạn đặt một ứng dụng để chạy trong nền. Trong trường hợp sudonày là yêu cầu mật khẩu, nhưng đang hỏi trong nền, vì vậy bạn không thể thấy thực tế này. Để xem nó, bạn nên đưa công việc trở lại trong foreground bằng fglệnh:

radu@Radu: ~ $ sudo emacs tet.c &
[1] 7732
radu@Radu: ~ $ # now sudo emacs run in background so you can't see nothing about what's happening
radu@Radu: ~ $ fg
[sudo] password for radu:

Sau này, bạn có thể gõ Ctrl+ Zđể đặt lại công việc trong nền nếu bạn muốn. Sau đó, bạn có thể chạy lại lệnh 'fg' để mang lại công việc ở phía trước và cứ thế.


Đối với tôi, nó luôn luôn telnet. Tôi quên quit:) (xem superuser.com/questions/486496/how-do-i-exit-telnet )
cmroanirgo

1
Vì vậy, tôi chỉ cần nhấn Ctrl + d hai lần (!) Và nhận được thông báo tương tự sau lần đầu tiên. Có cách nào để tìm ra công việc tôi vừa giết không?
Matsmath

19

Bạn nhận được thông báo, bởi vì hệ thống cảnh báo bạn về các công việc đang hoạt động liên quan đến trình bao hiện tại của bạn.

Bạn có thể liệt kê các công việc đang chạy / dừng này bằng cách chạy : jobs,

Sau đó, bạn có thể làm một trong những điều sau đây:

  • chuyển công việc cuối cùng sang tiền cảnh bằng cách: fg(đối diện bgvới nền),
  • chạy disownđể loại bỏ các công việc này khỏi vỏ hiện tại của bạn mà không giết chúng,
  • buộc đăng xuất bằng cách tắt các tác vụ này bằng cách nhấn Ctrl+Dhai lần, giống như gõ exit/ logouthai lần,
  • giết các công việc này bằng tay bằng cách chạy: kill $(jobs -p)(thêm -9lực lượng)
  • nếu bạn từ chối chúng và bạn vẫn muốn giết tất cả các tiến trình đã dừng, hãy thử:

    kill $(ps wuax | awk 'NR>1 && $8 ~ "T" {print $2}')


Để trả lời câu hỏi sudo, nó sẽ không hỏi bạn mật khẩu, vì nó yêu cầu phải có thiết bị đầu cuối hoạt động để nhận mật khẩu từ đầu vào tiêu chuẩn và bằng cách chạy nền, trình bao không chờ lệnh kết thúc , vì vậy bạn không có khả năng tương tác với lệnh.

Trong trường hợp này, bạn có 3 khả năng:

  • chạy lệnh mà không đi vào nền ( &),
  • đọc mật khẩu từ đầu vào tiêu chuẩn thay vì thiết bị đầu cuối bằng cách, sudo -Sví dụ

    echo mypass | sudo emacs tet.c
    
  • cấu hình sudo để không yêu cầu mật khẩu bằng cách: visudolệnh và chỉnh sửa sudoerstập tin. Xem: Kích hoạt NOPASSWDcho người dùng


6

Khi bạn gặp phải lỗi dừng công việc :

  1. loại jobs-> bạn sẽ thấy các công việc với trạng thái dừng
  2. và sau đó gõ exit-> bạn có thể ra khỏi thiết bị đầu cuối
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.