Как я могу видеть то, что выполняют процессы?

Это не работает потому что iconv сначала создает выходной файл (так как файл уже существует, он усекает его), затем начинает читать его входной файл (который теперь пуст). Большинство программ ведет себя этот путь.

Создайте новый, временный файл для вывода, затем переместите его в место.

for file in *.php
do
    iconv -f cp1251 -t utf8 -o "$file.new" "$file" &&
    mv -f "$file.new" "$file"
done

Если Ваша платформа iconv не имеет -o, можно использовать перенаправление оболочки для того же эффекта.

for file in *.php
do
    iconv -f cp1251 -t utf8 "$file" >"$file.new" &&
    mv -f "$file.new" "$file"
done

Colin Watson sponge утилита (включенный в moreutils Joey Hess) автоматизирует это:

for file in *.php
do
    iconv -f cp1251 -t utf8 "$file" | sponge "$file"
done

Этот ответ применяется не только к iconv но к любой программе фильтра. Несколько особых случаев стоит упомянуть:

  • GNU sed и Perl -p имейте a -i опция заменить файлы на месте.
  • Если Ваш файл является чрезвычайно большим, Ваш фильтр только изменяет или удаляет некоторые части, но никогда не добавляет вещи (например. grep, tr, sed 's/long input text/shorter text/'), и Вам нравится жить опасно, можно хотеть действительно изменить файл на месте (другие решения, упомянутые здесь, создают новый выходной файл и перемещают его в место в конце, таким образом, исходные данные неизменны, если команда прервана по какой-либо причине).

22
23.11.2010, 23:28
3 ответа

От ps страница справочника:

- e Выбор все процессы. Идентичный-A.

Таким образом, ps -e отобразит все процессы. Общие опции для "дают мне, все" ps -ely или ps aux, последним является BSD-стиль. Часто, люди затем передают этот вывод по каналу к grep искать процесс, как в ответе xenoterracide. Чтобы постараться не также видеть grep самостоятельно в выводе, Вы будете часто видеть что-то как:

 ps -ef | grep [f]oo

где нечто является именем процесса, Вы ищете.

Однако, если Вы ищете конкретный процесс, я рекомендую использовать pgrep управляйте, доступно ли это. Я полагаю, что это доступно на Сервере Ubuntu. Используя pgrep средства Вы избегаете упомянутого выше состояния состязания. Это также обеспечивает некоторые другие функции, которые все больше требовали бы сложный grep обман для тиражирования. Синтаксис прост:

pgrep foo

где нечто является процессом, для которого Вы смотрите. По умолчанию это просто произведет идентификатор Процесса (PID) процесса, если это найдет тот. Посмотрите man pgrep для других выходных опций. Я нашел следующую страницу очень полезной:

http://mywiki.wooledge.org/ProcessManagement

26
27.01.2020, 19:43
  • 1
    Интересно, какой процент людей используют ps не зная флаги. Я просто бросаю aux в нем всегда; я понятия не имею, чем на самом деле управляют отдельные флаги –  Michael Mrozek♦ 21.10.2010, 08:07

Вы попробовали ps aux | grep postgres? это действительно должно обнаружиться, если пост-ГРЭС работает. Если это не делает..., как Вы знаете, что пост-ГРЭС работает?

(примечание: это - распространенное заблуждение, которое это, это ps -aux но это не корректно),

3
27.01.2020, 19:43
  • 1
    Спасибо, ps aux работавший лучше, это показало приблизительно 70 процессов, в то время как ps показал только два. Я знаю, что PostgreSQL работал, так как я видел, что он был запущен на, загружаются, и он был остановлен на завершении работы. –  Jonas 21.10.2010, 03:20
  • 2
    @Jonas некоторые init сценарии плохо записан. Не верьте им просто, потому что они говорят, что что-то было запущено и остановлено. Просто некоторый совет –  xenoterracide 21.10.2010, 03:41
  • 3
    Существует также pgrep для этого, которое обладает преимуществом никогда ловли Вашего ps aux | grep postgres сама команда в списке процессов и выводе его –  Michael Mrozek♦ 21.10.2010, 08:09

Ответ, включая эффективную фильтрацию вывода вместе с автоматической функцией bash

ps -elf | head -n 1; ps -elf | grep -i search_term | grep -v grep | grep -v "ps -elf"

Замените search_termвыше любым термином, который вы хотите найти, чтобы найти 0 или более процессов, например term.

Пример использования:

ps -elf | head -n 1; ps -elf | grep -i term | grep -v grep | grep -v "ps -elf"

Выход:

F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
0 S user     14919  1394  0  80   0 - 217553 poll_s 04:14 ?       00:00:12 /usr/lib/gnome-terminal/gnome-terminal-server

Автоматизировать

В корне вашего домашнего каталога, если у вас еще нет файла псевдонимов.bash _, введите следующее:

touch.bash_aliases

Затем добавьте функцию для выполнения команд в конец файла псевдонимов.bash _:

echo 'pself() { ps -elf | head -n 1; ps -elf | grep -i "$1" | grep -v grep | grep -v "ps -elf"; }' >>.bash_aliases

Пример использования (сначала откройте новое окно терминала):

pself term

Выход:

F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
0 S user     14919  1394  0  80   0 - 217553 poll_s 04:14 ?       00:00:12 /usr/lib/gnome-terminal/gnome-terminal-server

(Проверено выше на Ubuntu 18.04 ).

Статья, объясняющая все это подробно:здесь

0
30.08.2020, 03:44

Теги

Похожие вопросы