Điểm:3

Thoát khỏi thiết bị đầu cuối vs Đóng thiết bị đầu cuối

lá cờ br

Bối cảnh:-

Tôi đang chạy một quy trình trong bash với & được nối tức là ở chế độ nền. quy trình có một trong khi(1) tức là nó sẽ chạy mãi mãi. Bash của tôi là cha mẹ và quá trình của tôi trở thành con. Tôi muốn tìm hiểu cách Kernel xử lý đứa trẻ khi cha mẹ bị chấm dứt.

Quan sát: -

  1. Nếu tôi thoát khỏi thiết bị đầu cuối (sử dụng lối ra lệnh từ thiết bị đầu cuối), /lib/systemd/systemd --user trở thành tiến trình cha của đứa trẻ
  2. Nếu tôi giết quá trình đầu cuối (sử dụng giết chết) từ một thiết bị đầu cuối khác, kết quả tương tự như trên
  3. Nếu tôi đóng thiết bị đầu cuối bằng biểu tượng chéo, quá trình con cũng bị chấm dứt

Câu hỏi:-

Đóng khác với giết/thoát như thế nào?

sudodus avatar
lá cờ jp
Bạn đang chạy phiên bản nào (20.04.x ​​LTS?) và hương vị nào (Ubuntu Desktop, Kubuntu, Lubuntu ... Xubfox?)? Bạn đang chạy trình giả lập thiết bị đầu cuối nào (gnome-terminal hay ...?) Nó là tiến trình con nào (nó có phải là chương trình được biên dịch, shellscript ...; nó đang chạy trong cửa sổ của chính nó hay trong nền hoặc trong thiết bị đầu cuối ban đầu cửa sổ)?
Saad Abdul Majid avatar
lá cờ br
@sudodus, lỗi của tôi là do thiếu thông tin. Tại đây: Ubuntu Desktop, 18.04.5 LTS, gnome-terminal, chương trình đã biên dịch chạy trong cửa sổ của thiết bị đầu cuối
Điểm:1
lá cờ us
shk

Có nhiều loại tín hiệu khác nhau trong linux. Khi bạn lối ra thiết bị đầu cuối, tín hiệu được gửi khác với tín hiệu được gửi khi bạn đóng thiết bị đầu cuối bằng cách nhấp vào x. Hãy thử đi qua tín hiệu chấm dứt để tìm hiểu xem việc đóng và thoát thiết bị đầu cuối khác nhau như thế nào.

Zanna avatar
lá cờ kr
Tôi đã xem qua và tôi vẫn không biết tín hiệu nào được gửi khi chúng tôi đóng cửa sổ trình giả lập thiết bị đầu cuối hoặc tín hiệu nào được gửi khi chúng tôi nhập `exit` trong thiết bị đầu cuối. Bạn có thể vui lòng xây dựng và giải thích những tín hiệu nào được gửi và sự khác biệt giữa chúng không?
Điểm:0
lá cờ jp

tôi đã sử dụng ping trong một thiết bị đầu cuối gnome window và tôi có thể xác nhận những quan sát của bạn. Tôi nghĩ đó là một vấn đề, rằng một quá trình có thể bị bỏ chạy mà không có nơi nào để giao tiếp. Tôi sẽ cố gắng giải thích những gì tôi nhận thấy (nhưng tôi không khẳng định rằng tôi hiểu tại sao, có thể cho phép các chương trình có GUI riêng hoạt động mà không cần nohup sau khi thoát khỏi đánh đập, khi bắt đầu trong cửa sổ đầu cuối).

  • Khi tôi lối ra tôi đang thoát khỏi đánh đập chạy trong cửa sổ đầu cuối và ping tiếp tục chạy, nhưng không có nơi nào để viết.

  • Khi tôi giết chết quá trình, tôi giết đánh đập quá trình trong cửa sổ đầu cuối. tôi không tìm thấy một cách rõ ràng thiết bị đầu cuối gnome quá trình để giết, bởi vì quá trình /usr/lib/gnome-terminal/gnome-terminal-server chạy tất cả chúng. Tôi không chắc rằng đây là những gì bạn đang làm, nhưng đó là những gì tôi đoán.

  • Khi tôi đóng cửa sổ (bằng nút x), tôi thoát khỏi quy trình cửa sổ (do đó buộc các quy trình con của nó dừng bao gồm đánh đậpping). Đây là một sự khác biệt rõ ràng so với hai trường hợp trước đó.


Khi tôi làm bài tập tương ứng với xterm, sẽ có một quy trình riêng với tên 'xterm'.

  • Khi tôi lối ra tôi đang thoát khỏi đánh đập chạy trong cửa sổ đầu cuối và ping tiếp tục chạy, nhưng không có nơi nào để viết.

  • Khi tôi giết chết quá trình, tôi giết xterm tiến trình của cửa sổ đầu cuối, (từ đó buộc các tiến trình con của nó dừng lại, bao gồm đánh đậpping).

  • Khi tôi đóng cửa sổ (bằng nút x), tôi thoát khỏi quy trình cửa sổ (do đó buộc các quy trình con của nó dừng lại, bao gồm đánh đậpping).


Bạn đã biết rồi, rằng bạn có thể sử dụng nohup (cùng với &) nếu bạn muốn tiến trình con tiếp tục sau khi đóng cửa sổ đầu cuối, nơi tiến trình con được bắt đầu.


Chỉnh sửa 1: Nhận xét cuối cùng:

Từ người đàn ông bash

Nếu một lệnh bị chấm dứt bởi toán tử điều khiển &, trình bao thực thi lệnh ở chế độ nền trong một lớp con. Vỏ không không đợi lệnh kết thúc và trạng thái trả về là 0.

Chúng tôi đã nhận thấy rằng không có tín hiệu dừng subshell và quá trình bắt đầu trong/từ subshell đó, khi đánh đập được thoát, ít nhất là không khi chạy trong cửa sổ đầu cuối. Nhưng cửa sổ thiết bị đầu cuối cuộc gọi đã bị đóng. Tôi nghĩ rằng sau khi thoát bash, cửa sổ đầu cuối không còn biết về lớp con nữa và quá trình bắt đầu trong/từ lớp con đó, và do đó nó không thể dừng chúng.

Chỉnh sửa 2: Tôi đã yêu cầu trợ giúp tại Unix & Linux - Vui lòng đọc câu trả lời.

Điểm:0
lá cờ pe

Quá trình bắt đầu như thế này ./my process & là con của cha mẹ đánh đập quá trình được mở bởi chương trình đầu cuối. Dấu hiệu & sẽ không giúp bạn đóng cửa sổ đầu cuối trước khi kết thúc một quá trình dài.

Những gì bạn đang tìm kiếm là lệnh nohup

user@host:~$ nohup bash -c '/path/to/my process'

Thêm thông tin : http://manpages.ubuntu.com/manpages/impish/en/man1/nohup.1.html
Vài ví dụ: https://linuxhint.com/nohup_command_linux/

Saad Abdul Majid avatar
lá cờ br
Tôi chỉ cần biết lý do đằng sau những quan sát của tôi. Để có ý nghĩa của những gì tôi đang quan sát. Tôi nghĩ đó là về tín hiệu được gửi đến các quy trình.
lá cờ pe
@Saad Abdul Majid: xem phần đầu tiên trong câu trả lời của tôi, việc đóng cửa sổ đầu cuối sẽ giết quá trình bash gốc

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.