Создание сценария оболочки, который анализирует и перенаправляет число в следующую команду?

Запуск:

perl -e '$a="x"x1000000000;sleep(10);print"done\n"'

занимает 1,8 ГБ ОЗУ. Итак, вы ожидаете, что выполнение этого:

perl -e '$a="x"x1000000000;fork;fork;fork;fork;sleep(10);print"done\n"'

займет в 16 раз больше. Но это не так.

Это связано с интеллектуальной функцией копирования при записи в ядре Linux: поскольку содержимое '$ a' не изменяется, память '$ a' может использоваться совместно. Но он останется общим только до тех пор, пока не будет изменен «$ a». Когда это произойдет, измененный раздел будет скопирован и начнет занимать оперативную память.

Я не знаю, можете ли вы измерить, какой объем памяти является избыточным при копировании при записи. Но, по крайней мере, это объясняет ваш завышенный подсчет.

1
02.03.2014, 14:35
2 ответа

Обратите внимание, что уже существует команда, которая делает то, что вы хотите сделать: killall -15 Xorg .

Вы также можете сделать kill -15 $ (pidof Xorg) .

Для вашего сценария вы можете использовать ps aux | grep Xorg | grep -v grep | awk '{print $ 2}' как предложено @Adionditsak или ps ax | grep Xorg | grep -v grep | awk '{print $ 1}' (без опции 'u' в ps ).

2
27.01.2020, 23:21

Получить PID процесса в строке 2 ( awk '{print $ 2}' ) и установить в переменной. Тогда убей его. Что-то вроде этого?

xorg_process=$(ps aux | grep 'Xorg' | awk '{print $2}')
kill -15 $xorg_process
2
27.01.2020, 23:21

Теги

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