Автор Тема: [Решено]запустить процесс и тут же остановить  (Прочитано 1884 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн su16

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 191
  • Сообщений: 174
Добра!

надо одной строчкой запустить какой-нибудь процесс сразу в состоании саспенда.
идея крупными мазками выглядит так:

ping localhost &
kill -STOP $!
как это одной строкой сделать?
тут ругается, что нельзя вторую команду выполнить, если первая с & на конце.
ping localhost & && kill -STOP $!
« Последнее редактирование: 10 Декабрь 2015, 20:50:36 от su16 »
Если вам дают бесплатное, то, скорее всего, товар - это вы.
http://ru.occupyflash.org/
 


Оффлайн vic5710

  • Местный житель
  • ***
  • Сообщений: 452
  • не умножайте сущностей сверх необходимых
Re: запустить процесс и тут же остановить
« Ответ #1 : 09 Декабрь 2015, 12:21:23 »
ping localhost & && kill -STOP $!
в скобках попробуйте
(ping localhost &)
« Последнее редактирование: 09 Декабрь 2015, 18:23:18 от vic5710 »
 

Оффлайн su16

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 191
  • Сообщений: 174
Re: запустить процесс и тут же остановить
« Ответ #2 : 10 Декабрь 2015, 00:13:20 »
не работает

(ping localhost &) && (kill -s SIGSTOP $!)
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
...

(ping localhost &) && kill -STOP $!
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
...
процесс в скобках померает раньше исполнения второй команды

вот ещё простой пример для понимания проблемы
((sleep 2;nano) &)
Получен SIGHUP или SIGTERM
процесс помер через 2 секунды... а без скобок работает в бекграунде
(sleep 2;nano) &
« Последнее редактирование: 10 Декабрь 2015, 00:50:11 от su16 »
Если вам дают бесплатное, то, скорее всего, товар - это вы.
http://ru.occupyflash.org/
 

Оффлайн vic5710

  • Местный житель
  • ***
  • Сообщений: 452
  • не умножайте сущностей сверх необходимых
Re: запустить процесс и тут же остановить
« Ответ #3 : 10 Декабрь 2015, 02:53:47 »
kill нужен pid процесса ЕМНИП
(ping localhost &) && kill -STOP $!
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
...
работают фигурные скобки:
{ ping localhost & } && kill -STOP $!

Cообщение объединено 10 Декабрь 2015, 18:58:08
а вообще оптимально через пробел - не создаются лишние шеллы:
ping localhost& kill -STOP $!
« Последнее редактирование: 10 Декабрь 2015, 18:58:08 от vic5710 »
 
Пользователи, которые поблагодарили этот пост: su16

Оффлайн su16

  • Местный житель
  • ***
  • Topic Author
  • Сообщений: 191
  • Сообщений: 174
Re: запустить процесс и тут же остановить
« Ответ #4 : 10 Декабрь 2015, 20:50:10 »
vic5710, Спасибо, оба варианта работают.

не знал я  про тонкости скобок. вот тут про них. кстати, в твоём варианте с { } дополнительные шелы тоже не создаются:
Цитировать
    ( list )
    Placing a list of commands between parentheses causes a subshell environment to be created (see Command Execution Environment), and each of the commands in list to be executed in that subshell. Since the list is executed in a subshell, variable assignments do not remain in effect after the subshell completes.
    { list; }
    Placing a list of commands between curly braces causes the list to be executed in the current shell context. No subshell is created. The semicolon (or newline) following list is required.
потому PID и не пробрасывался у меня, что я юзал круглые...

фокус с пробелом работает потому что & считается разделителем, как и ; и &&
Цитировать
A list is a sequence of one or more pipelines separated by one of the operators ‘;’, ‘&’, ‘&&’, or ‘||’, and optionally terminated by one of ‘;’, ‘&’, or a newline.

поправьте, если не так понял.
« Последнее редактирование: 10 Декабрь 2015, 21:06:13 от su16 »
Если вам дают бесплатное, то, скорее всего, товар - это вы.
http://ru.occupyflash.org/
 

Оффлайн vic5710

  • Местный житель
  • ***
  • Сообщений: 452
  • не умножайте сущностей сверх необходимых
http://linux.yaroslavl.ru/docs/conf/gnu-util/bash/bash_ug.html
( ) - порождают субшелл
{ } - выполняются в контексте текущего шелла


Cообщение объединено 10 Декабрь 2015, 21:15:50
насчет разделителя не знаю, видел в мане.
вообще в bash лучше писать просто, ошибки искать замаешься

Cообщение объединено 10 Декабрь 2015, 21:24:45
я так понял, что у тебя в исходном варианте было & && - два разделителя подряд, поетому и была ошибка
операторы && и || - это if-then-else
touch myfile
[ -f myfile ] && echo OK || echo ERROR
OK
rm myfile
[ -f myfile ] && echo OK || echo ERROR
ERROR
« Последнее редактирование: 11 Декабрь 2015, 01:57:37 от vic5710 »
 
Пользователи, которые поблагодарили этот пост: su16

Теги:
 

[РЕШЕНО] Подключение Huawei Honor к Debian+Xfce4

Автор TimWCA

Ответов: 2
Просмотров: 326
Последний ответ 30 Июнь 2020, 20:35:19
от TimWCA
Артефакты вместо выбора пользователя… [РЕШЕНО]

Автор shok

Ответов: 23
Просмотров: 3204
Последний ответ 05 Февраль 2013, 21:24:03
от shok
[Решено] Помогите с простым скриптом запуска приложения

Автор Sergei_Alekseev

Ответов: 27
Просмотров: 4273
Последний ответ 06 Август 2013, 06:35:28
от qupl
[Решено] GUI для терминальных команд.

Автор doctor@tardis

Ответов: 9
Просмотров: 1946
Последний ответ 12 Декабрь 2013, 22:24:06
от doctor@tardis
Как правильно чистить логи [решено]

Автор CoolAller

Ответов: 18
Просмотров: 22117
Последний ответ 15 Сентябрь 2015, 02:46:58
от CoolAller