Как преобразовать вывод ps(1) в JSON?

Команды связаны с конвейером (здесь я говорю о системном примитиве - очевидно, они связаны с | ). Когда конец канала для чтения ( stdin из head ) становится close d (== когда head либо явно ( ] close ) или неявно (exit) закрывает его), попытки записи в конец записи ( stdout of yes ) завершатся ошибкой.

По умолчанию это не просто обычная ошибка errno , а сбой, в результате которого процесс записи получает сигнал SIGPIPE .По умолчанию обработчик сигнала SIGPIPE завершает работу.

Короче говоря, если вы напишете на сломанный канал, система отправит вам SIGPIPE и по умолчанию SIGPIPE убьет вас. Вот почему да завершается, когда голова заканчивается (и тем самым разрывает трубу).


Если вы проигнорируете SIGPIPE в родительской оболочке, то команды унаследуют это расположение, и запись в сломанный канал просто вызовет ошибку errno . из EPIPE . Как оказалось, да преобразовывает эту ошибку в строку и печатает ее:

$ (trap "" SIGPIPE; yes | head -n 5)  
y
y
y
y
yes: standard output: Broken pipe
yes: write error

4
17.11.2015, 05:26
0 ответов

Теги

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