Как делает “в то время как (спят 100 и!) делают; сделанная” работа в zsh, и как это могло копироваться в ударе?

ActiveSheet является объектом Excel. Я думаю, что вы хотите использовать ActiveSlide для PowerPoint.

14
задан Roger Pate 12 November 2013 в 01:49
поделиться

4 ответа

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

, поскольку код fork-бомбы Вы обеспечили, умирает, если он не может породить дочерний процесс, родительские процессы на самом деле не бродят вокруг, но то, что дети продолжают создавать новый grand*-children, сохраняет таблицу процессов полной.

, Таким образом, решение для сна разработано для крадений в некоторых процессах, которые просто спят в течение короткого промежутка времени, и для каждого спящего процесса, которому удается быть созданным, существует меньше случая fork-бомб. В конечном счете спящие процессы заполняют таблицу процесса сами, и fork-бомбы вымирают.

, После того как таблица процессов полна от спящих процессов, цикл с условием продолжения может быть уничтожен, и спящие процессы умрут, после того как их время сна закончилось. проблема решила .

, Как был уже упомянут, важная часть команды zsh является выполнением в фоне &, таким образом, команда удара в основном совпала бы с данный в других ответах:

while (sleep 100 &) do; done

я не думаю, что nohup / ! часть важна, если Вы не хотите выйти из системы в течение времени сна, но я был бы рад быть разъясненным, если я неправ.

11
ответ дан 1 December 2019 в 10:05
поделиться

Сначала fork-бомба может быть записана:

foo()
{
    foo|foo&
}
foo

, Который делает это немного более ясным - каждое повторение запускает два подпроцесса, затем умирает. Таким образом, если разветвляющиеся сбои, это не будет бродить вокруг.

Поэтому все, что мы должны сделать, заставляют разветвление временно перестать работать. Таким образом мы создаем процессы, которые спят 100 и занимают место процесса, как спящие процессы делают.

zsh &! похож &, но отрицает новый процесс (не уничтожает его при выходе из системы) - это, вероятно, не важно в этом примере. ( руководство ), Это может быть заменено nohup.

Поэтому удар:

while (nohup sleep 100 &) do; done

должен работать.

8
ответ дан 1 December 2019 в 10:05
поделиться

Очень интересный вопрос!

В соответствии с той статьей Wikipedia, цель полной команды состоит в том, чтобы создать много безопасных заданий, которые отключат fork-бомбу, потому что она больше не не будет способный породить еще больше детей.

Согласно zsh руководство ,

, Если задание запускается с &|' or &!', затем, что задание сразу отрицают. После запуска это не имеет места в таблице задания и не подвергается функциям управления заданиями, описанным здесь.

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

nohup sleep 100 &
2
ответ дан 1 December 2019 в 10:05
поделиться

Я тот парень, который написал ту часть статьи в Википедии (и кто «открыл» это лекарство после случайного запуска вилочной бомбы в моей системе!).

Причина "&!" вместо «&» действительно предотвращает выполнение zsh управления заданиями над новым процессом, то есть пытается позаботиться о том, когда и завершится ли он. Я точно не помню, почему контроль над работой был проблемой, когда я это пробовал, но это было. Вы действительно можете попробовать это, чтобы увидеть, как работает «лекарство» и что произойдет, если вы не предотвратите контроль над работой. Возможно, проблема с управлением заданиями была связана с какой-то ошибкой в ​​zsh, которой даже нет в bash, и, возможно, она больше не актуальна и в zsh.

Так что попробуйте просто «&» с bash, и если задание мешает управление, попробуйте отключить его ("set + m"

6
ответ дан 1 December 2019 в 10:05
поделиться