Shell script bắt đầu một tiến trình, bắt đầu một tiến trình khác, sau đó giết tiến trình đầu tiên


3

Hãy tưởng tượng tôi có một client và một server trên cùng một máy và tôi muốn tạo một số tương tác giữa chúng.

Tôi thực sự muốn một kịch bản shell để -

  1. Khởi đầu server
  2. Đặt server trong nền
  3. Khởi đầu client
  4. (chờ client làm bất cứ điều gì nó làm)
  5. Dừng lại server

Tôi có thể làm hầu hết những thứ đó rồi, như thế này -

./server &
./client

Nhưng lá đó server chạy sau khi kịch bản kết thúc, ngoài bất cứ điều gì khác, là rất không gọn gàng.

Tôi có thể làm gì?

Câu trả lời:


5

Bạn có thể sử dụng kiểm soát công việc bash:

#!/bin/bash

./server &
./client
kill %1

Hãy chắc chắn để đặt #!/bin/bash ở phần đầu của tập lệnh để bash được sử dụng để thực thi tập lệnh (Tôi không chắc liệu điều khiển công việc có được hỗ trợ trong sh hay không, vui lòng sửa lại cho tôi nếu có).


Không vấn đề gì! Rất vui được giúp đỡ!
Wuffers

2

Bạn có thể đạt được kết quả tương tự với sh POSIX tiêu chuẩn. Trong sh, khi bạn sinh ra một quy trình trong nền bằng cách sử dụng '& amp;', thì PID của quy trình được lưu trữ trong biến đặc biệt $!. Vì thế:

#!/bin/sh
./server &
./client
kill $!

Đối với các tình huống phức tạp hơn, bạn có thể muốn lưu pid:

#!/bin/sh
./server &
serverpid=$!
# ... lots of other stuff
kill $serverpid
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.