Я начал
while true; do yad; sleep 60; done &
и закрыл терминал, чтобы проверить его, теперь у меня такая же проблема.
Давайте посмотрим обзор запущенных процессов с помощью ps fjx, последние строки на моей машине читаем
2226 11606 11606 19337 ? -1 S 1000 0:00 \_ /bin/bash
11606 22485 11606 19337 ? -1 S 1000 0:00 | \_ sleep 10
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
1 2215 2215 2215 ? -1 Ss 1000 0:00 /lib/systemd/systemd --user
2215 2216 2215 2215 ? -1 S 1000 0:00 \_ (sd-pam)
Вы можете видеть yad как подпроцесс /bin/bash, если я закрываю yad, он изменяется на sleep 60 на выходе ps. Если древовидное представление слишком запутанно, вы также можете искать выход следующим образом:
ps fjx | grep "[y]ad" # or respectively
ps fjx | grep "[s]leep 60"
Выходные строки начинаются с двух чисел, первым из которых является идентификатор PPID, идентификатор процесса родительского процесса и второй являющийся PID, идентификатором самого процесса. Именно из-за этого 9411 появляется в обеих строках:
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
Это bash подоболочка, которую мы хотим убить, и мы только что узнали ее PID, так что теперь все, что остается, является простым
kill 9411 # replace 9411 with the PID you found out!
, и раздражающая подоболочка ушла навсегда.
1
[!d13 ]bash, вы можете указать переменную $!, которая «расширяет идентификатор процесса задания, который недавно был помещен в фоновый режим», поэтому следующее просто убивает последний процесс в фоновом режиме:
kill $!
Если это не последний процесс, просто вы можете получить список запущенных заданий с встроенным jobs, например:
[1]- Running while true; do
yad; sleep 60;
done &
[2]+ Stopped sleep 10
В списке заданий есть два задания, чтобы убить одного из них, вы можете получить к нему доступ с номером задания или ярлыками %, %+ («текущее задание») и %- («предыдущее задание») ), например чтобы убить цикл, выполняемый в фоновом режиме, вы можете сделать
kill %1 # or
kill %-
и убить приостановленное задание sleep 10:
kill %2 # or
kill %+ # or
kill %
Изменить: я должен был проверить это!
Kees очень правилен. time - это оболочка, встроенная в большинстве случаев, поэтому ее вывод не проходит через STDOUT, как обычно. Вы можете использовать версию команды, сидящую, но чтобы сохранить два идентичных ответа (или я удалил мой), вот еще один способ захватить вещи, которые не выводятся традиционным способом.
bash -c "time ./myprog" 2>&1 > file.txt
Одинаковые принципы как раньше. Если вы хотите, чтобы gedit загрузился после этого, нажимайте && gedit file.txt, если вы хотите, чтобы он был добавлен, измените > на >>.
Если ваша команда очень шумная, и вы просто хотите время , вы можете запустить вывод через tail:
bash -c "time ./myprog" 2>&1 | tail -3 > file.txt && gedit file.txt
Чтобы просто сохранить его в файле, просто выполните это:
time ./myprog > file.txt
Вам не нужно расширение .txt, но оно может вам помочь. Если вы хотите добавить к файлу (вместо его замены), замените > на >>.
Если вы хотите, чтобы это отображалось в gedit специально, вам нужно сохранить его в файл и затем откройте его в gedit. Я не вижу способа прямого перевода текста непосредственно в gedit, не сохраняя его сначала.
time ./myprog > file.txt && gedit file.txt