file_size_kb=`du -k "$filename" | cut -f1`
Проблема с использованием
stat
это, это - GNU (Linux) расширение.du -k
иcut -f1
указаны POSIX и поэтому портативные к любой системе Unix.Солярис, например, поставлется с ударом, но не с
stat
. Таким образом, это не совсем гипотетически.
ls
имеет подобную проблему в этом, точный формат вывода не указан, так парсинг его вывода не может быть сделан портативно.du -h
также расширение GNU.Придерживайтесь портативных конструкций, если это возможно, и Вы сделаете чью-то жизнь легче в будущем. Возможно, Ваше собственное.
Использование GNU screen
Ваш лучший выбор.
Выполнение экрана "Пуск", когда Вы сначала входите в систему - я работаю screen -D -R
, выполните свою команду, и или разъедините или приостановите ее с CTRL-Z
и затем разъединение с экрана путем нажатия CTRL-A
затем D
.
Когда Вы входите в машину снова, снова соединяетесь путем выполнения screen -D -R
. Вы будете в той же оболочке как прежде. Можно работать jobs
видеть приостановленный процесс, если Вы сделали так и работали %1
(или соответствующее задание #) к переднему плану это снова.
Можно отменить “владение” программы от оболочки с disown
встроенный:
# press Ctrl+Z to suspend the program
bg
disown
Однако это только говорит оболочке не отправлять a SIGHUP
предупредите к программе, когда оболочка выйдет. Программа сохранит любое соединение, которое она имеет с терминалом, обычно как стандартный вход, потоки вывода и потоки сообщений об ошибках. Нет никакого способа повторно прикрепить тех, которые к другому терминалу. (Экранные работы путем эмуляции терминала для каждого окна, таким образом, программы присоединены к экранному окну.)
Возможно повторно прикрепить filedescriptors к другому файлу путем присоединения программы в отладчике (т.е. использование ptrace
) и то, чтобы заставлять это звонить open
, dup
и close
. Существует несколько инструментов, которые делают это; это - хитрый процесс, и иногда они будут разрушать процесс вместо этого. Возможности включают (ссылки, собранные от ответов до того, Как я могу отрицать рабочий процесс и связать его к новой экранной оболочке? и Могу я nohup/screen уже запущенный процесс?):
fg
или kill
это, и видит, заканчивается ли это самостоятельно.
– Peter Cordes
11.08.2015, 23:47
bzcat a.bz2 | grep text
)? Человек для reptyr
говорит, что это не поддерживает перемещение процессов с детьми.
– dma_k
18.10.2015, 12:17
Я регулярно не использую его, но neercs утверждает, что поддерживал это. Это - a screen
- как программа с разными необычными функциями как лучшее управление областью, но главное это предлагает, способность импортировать процесс в область
ptrace
), но это только управляет дескрипторами файлов, это разветвляет процесс. Это может захватить find /
, но разрушенный интерактивный удар.
– Gilles 'SO- stop being evil'
14.11.2010, 00:20
Чтобы переместить процесс между терминалами или повторно прикрепить отрицаемый, можно использовать, например, reptyr.
screen
ответ, конечно, идеален, он на самом деле не отвечает на вопрос, который конкретно запрашивает способ переместить в настоящее время рабочий процесс в screen
и т.п. Также см. этот ответ: serverfault.com/a/284795
– toxefa
19.04.2015, 00:15
Мое любимое решение использует tmux
, Вы могли отсоединить сессию и повторно прикрепить ее в другом терминале.
Когда Вы отсоединились от предыдущей сессии, можно безопасно закрыть терминал; позже используйте tmux attach
возвращаться к сессии, даже если Вы вышли из системы.
$ sudo ssh last-call-2 Password: $ sudo ssh -o "BatchMode=yes" last-call-2 Permission denied (gssapi-keyex,gssapi-with-mic,publickey,password,keyboard-interactive).
---------121 пример--------72394----использования?
– Vitaly Zdanevich
20.02.2016, 02:55
Сначала узнайте PID процессов с помощью
, а затем отправьте сигналы на этот PID, перечисленный в списке процесса
"Injcode" от ThomasHabets, кажется, именно то, что мне нужно:
https://github.com/ThomasHabets/injcode
Программа Injcode позволяет вставлять произвольный код в работающий процесс , знали ли вы заранее и запускали ли вы screen или tmux
Из README:
Пример 1: переместите irssi с одного терминала на другой
Возможно, переместите его на экран.
Сначала запустите irssi на одном терминале.
Запустите команду Injcode в другом терминале: $ injcode -m retty
Irssi теперь нужно переместить во второй терминал, включая новый управляющий терминал .