3

Давайте представим, что у меня есть client и server на одной машине, и я хотел бы написать сценарий взаимодействия между ними.

Я действительно хотел бы сценарий оболочки для -

  1. Запустить server
  2. Поставьте server в фоновом режиме
  3. Запустить client
  4. (ждать, пока client сделает все, что он делает)
  5. Стоп server

Я могу сделать большую часть этого уже, как это -

./server &
./client

Но после завершения работы скрипта server остается запущенным, что, помимо всего прочего, очень неопрятно.

Что я могу сделать?

2 ответа2

5

Вы можете использовать контроль заданий bash:

#!/bin/bash

./server &
./client
kill %1

Обязательно ставьте #!/bin/bash в начале скрипта, так что для выполнения скрипта используется bash (я не уверен, поддерживается ли управление заданиями в sh, пожалуйста, исправьте меня, если это так).

2

Вы можете добиться того же результата со стандартным POSIX sh. В sh, когда вы запускаете процесс в фоновом режиме, используя '&', PID процесса сохраняется в специальной переменной $ !. Так:

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

Для более сложных ситуаций вы можете сохранить pid:

#!/bin/sh
./server &
serverpid=$!
# ... lots of other stuff
kill $serverpid

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .