Обозначьте процесс и выполните что-то с помощью одной команды

Вероятно, было бы проще сделать только со сценарием, но мне интересно, почему я не могу сделать это с помощью одной команды. То, что я пробовал до сих пор:

$ (ls >/dev/null &) && echo $! 3135 $ (ls >/dev/null &) ; echo $! #bad idea, but if that worked, I could just add `sleep 0.1` 3135 $ ls >/dev/null & ; echo $! bash: syntax error near unexpected token `;' $ `ls >/dev/null &` && echo $! 3135 $ `ls >/dev/null &` ; echo $! 3135 

Число 3135 – это PID последнего фонового процесса, который содержит переменную $! , и он остается неизменным (также я использую Konsole и для успешного завершения процесса, он печатает что-то вроде [1] PID ) . Увы, ни одна из выполненных команд не отправляет процесс на задний план.

  • Как фоновый процесс может узнать свой собственный PID?
  • Как восстановить заданное задание из предыдущей оболочки?
  • ожидание и переработка ПИД
  • Могу ли я сделать «Есть прекращенные рабочие места», которые сложнее убить?
  • не может убить процесс gedit из своего PID
  • Почему некоторые программы немедленно возвращаются в оболочку, а другие - пока выполнение не завершено?
  • Как выполнить команду «jobs» unix в среде python
  • Что происходит, когда вы выполняете функцию, которая вызывает другую функцию?
  • One Solution collect form web for “Обозначьте процесс и выполните что-то с помощью одной команды”

    Это должно делать то, что вы хотите:

     $ ls > /dev/null & echo $! 

    Поскольку вы форсировали фоновую команду в подпроцесс различными способами, первая оболочка не имела никакого фонового процесса и, следовательно, $! не обновлялся.

    Теперь фоновый процесс запускается той же оболочкой, что и для выполнения echo $! так что теперь он делает то, что вы хотите.

    Linux и Unix - лучшая ОС в мире.