Đặt công việc trong nền mà không bị đóng băng


9

Nói rằng bạn bắt đầu công việc như thế này

foo

và sau đó mong muốn rằng bạn muốn đặt nó trong nền. Gõ Ctrl+ Zvà sau đó bgthực hiện thủ thuật nhưng sẽ đóng băng foogiữa Ctrl+ Zbg. Làm thế nào tôi có thể đặt foo trong nền mà không đóng băng đầu tiên?


7
Trường hợp sử dụng là gì? Tại sao nó là một vấn đề mà quá trình đóng băng trong một thời gian ngắn?
l0b0

Câu trả lời:


4

Kỹ thuật foođã chạy trong nền. Bạn có thể bắt đầu phiên cuối thứ hai và phiên thứ nhất sẽ tiếp tục chạy footrong khi bạn làm những việc khác.

Trong X, điều này chỉ đơn giản là bắt đầu một ứng dụng thiết bị đầu cuối thứ hai hoặc mở một tab khác nếu trình giả lập thiết bị đầu cuối của bạn có các tính năng như vậy.

Trên bảng điều khiển, nếu bạn không lập kế hoạch cho nó, bạn cần chuyển sang một thiết bị đầu cuối ảo khác và đăng nhập lại.

Nếu bạn sử dụng bộ ghép kênh đầu cuối như screenhoặc tmuxbạn có thể bắt đầu một phiên khác trong đó. Ví dụ, trong màn hình, điều này được thực hiện bằng cách sử dụng Ctrl+ Angay sau đó là Ctrl+ C. Để chuyển đổi giữa chúng, sử dụng Ca Cn và Ca Cp để qua lại giữa các phiên cuối.


Đó là, nó là không thể trong bash.
dùng877329

1
Câu trả lời này dường như được dựa trên một sự hiểu lầm về khái niệm của một công việc nền. Một thiết bị đầu cuối có thuộc tính "nhóm quy trình tiền cảnh", thường được đặt bởi trình bao, giúp các quy trình trong nhóm đó có thể đọc từ thiết bị đầu cuối và nhận các tín hiệu liên quan đến tty như SIGINT. Tất cả các quy trình đang chạy trên thiết bị đầu cuối không nằm trong nhóm quy trình nền trước là các quy trình nền. Khi bạn tạo một thiết bị đầu cuối mới, công việc nền trước của thiết bị đầu cuối ban đầu vẫn là công việc tiền cảnh trên thiết bị đầu cuối đó, ngay cả khi bạn không nhìn vào nó.

@ WumpusQ.Wumbley Điểm của câu trả lời của tôi là hầu hết các hệ thống (tất cả?) Có thể chạy bash đều đa tác vụ bởi chính bản chất của chúng. Trên một hệ thống như vậy, ngay cả khi một quá trình có, chẳng hạn, tập trung đầu vào, không có gì là "tiền cảnh" về chính quá trình đó; foo chính nó (không có kiểm tra cụ thể, mà tôi đoán trong tự nhiên là ở đâu đó giữa hiếm và không tồn tại) không quan tâm liệu nó có chạy trong cửa sổ trên cùng hay thậm chí nếu có thứ gì đó hiển thị đầu ra của nó.
một CVn

1
Quan điểm của tôi là khi câu hỏi đề cập cụ thể các từ "nền" và "công việc" - cả hai đều là thuật ngữ kỹ thuật với ý nghĩa được xác định bởi khung nhóm quy trình POSIX - cũng như các cơ chế của Ctrl-Z và bg, cả hai đều là cơ chế của Ctrl-Z và bg hoạt động trên các nhóm quy trình - và câu trả lời của bạn đề nghị hoàn toàn không sử dụng chức năng của nhóm quy trình và bạn sử dụng từ "nền" theo cách không khớp với định nghĩa thực tế của nó - bạn không phù hợp với câu trả lời của mình cho câu hỏi. Và để bắt đầu với "Về mặt kỹ thuật foođã chạy trong nền" ... chỉ là ... Không. Về mặt kỹ thuật.

@ WumpusQ.Wumbley Bằng cách nào đó tôi không nghĩ OP đọc tiêu chuẩn POSIX và nghĩ "hmm, tôi muốn sử dụng cái này, nhưng tôi đã bắt đầu foovậy bây giờ tôi phải làm gì?". Nếu bạn cảm thấy câu trả lời này (hoặc câu trả lời khác) không hữu ích trong việc trả lời câu hỏi, tôi sẽ khuyến khích bạn thực hiện các đặc quyền bỏ phiếu của mình cũng như để lại câu trả lời cho câu trả lời của bạn từ những gì bạn cảm thấy là góc chính xác, thay vì tranh luận về một trong những câu trả lời còn lại trong câu hỏi. Có lẽ bạn cảm thấy câu trả lời cho ví dụ l0b0 là tốt hơn, nhưng câu trả lời hàng của mình một cách để làm ít nhất khoảng những gì OP muốn.
một CVn

3

Thêm một &dấu hiệu sau lệnh ( foo &) sẽ làm nền ngay lập tức. Nhưng tôi tin rằng không có cách nào, trong một cấu hình thiết bị đầu cuối / vỏ tiêu chuẩn , để làm nền một cái gì đó ngay lập tức một khi nó được báo trước.


3

Gửi một ứng dụng từ nền trước đến nền đòi hỏi sự hợp tác từ cả thiết bị đầu cuối và vỏ. Thiết bị đầu cuối không thể làm điều đó một mình, vì trình bao phải đặt nhóm quy trình tiền cảnh. Shell không thể làm điều đó một mình, vì thiết bị đầu cuối phải xử lý phím bấm (vỏ không ở phía trước, vì vậy nó không thể nhận được nhấn phím).

Tôi có một cấu hình zsh nơi tôi có thể nhấn Ctrl+ Zhai lần liên tiếp; báo chí đầu tiên đình chỉ quá trình và báo chí thứ hai nối lại nó trong nền. Tôi không biết làm thế nào để chuyển nó sang bash.

Nếu bạn đang chạy trong trình giả lập thiết bị đầu cuối cho phép bạn thực hiện thao tác gõ phím, bạn có thể tiêm ^Zbg^M(sử dụng ^ký hiệu cho các ký tự điều khiển). Ví dụ: với trình giả lập thiết bị đầu cuối X11, chạy xdotool --window 1234 Ctrl_L+Z b g Returntrong đó 1234 là ID cửa sổ của trình giả lập thiết bị đầu cuối. Với Màn hình, chạy screen -S foo -p 12 -X stuff $'\032bg\r'ở đâu foolà tên của phiên màn hình và 12là ID cửa sổ.


2

Nếu cách gõ của bạn không đủ nhanh cho trường hợp thì hãy chạy kill -s SIGSTOP 1023 && kill -s SIGCONT 1023từ shell khác, giả sử 1023 là mục tiêu PID.

TUYÊN BỐ TỪ CHỐI: Như có lẽ Ruslan đã biết, trình tự đó thực sự khởi động lại công việc rất nhanh bashkhông nhận thấy điều đó.


Làm thế nào nó sẽ đặt công việc để nền?
Ruslan

Làm thế nào nhanh là nhanh?
dùng877329
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.