sed s/@var@/$VALUE/g <config.in >config
, но остерегайтесь случайных наклонных черт /
в $VALUE
- Вы, возможно, должны были бы выйти из них или использовать другой символ разделителя.
Процессы засыпают состояния, когда они ожидают чего-то, обычно ввод-вывод.
Ваш процесс будет в S
заявите, когда это делает чтения и возможно пишет, что блокируются. Может также произойти при ожидании на семафорах или других примитивах синхронизации.
Вы не можете "разбудить его" - это только продолжится, когда данные/ресурс, которых это ожидает, станут доступными.
Это все нормально и ожидается, и не обычно проблема. Как правило, эта "программа" работает на командной строке без файла:
while (<>) { print; }
проведет большую часть его времени в состоянии сна, которое хорошо - Вы не хотите, чтобы оно потратило впустую ЦП, в то время как оно ожидает ввода данных пользователем.
Если Вы думаете, что это - проблема, попытайтесь изменить способ, которым Вы делаете свой ввод-вывод (читающий большие блоки, в хороших кратных числах размера блока базового устройства, делая ввод-вывод с отображенной памятью, и т.д.).
Процесс в S
состояние обычно находится в блокирующемся системном вызове, таком как чтение или запись в файл или сеть или ожидание другой названной программы для окончания.
Можно использовать strace -p <pid>
узнать, какой системный вызов в настоящее время происходит. Это произведет вывод как
запишите (1, "foobar"..., 4096
то, что означает, что процесс пытается записать 4 096 байтов, запускающихся с "foobar" к stdout (fd № 1), но независимо от того, что он был перенаправлен в, занято, и буфер вывода полон.