На этот вопрос уже был дан ответ, и я не могу комментировать, потому что у меня пока недостаточно репутации. Но то, что вы ищете, это ciw
в vim.
В emacs ближе всего к этой комбинации я подошел:
M-b M-d
Это возвращает к началу слова, на котором находится курсор, а затем удаляет слово.
То, что вы хотите, невозможно. Процесс не может точно знать, какой процесс отправил ему сигнал :, если несколько процессов отправят один и тот же процесс одному и тому же сигналу в течение достаточно короткого промежутка времени, получатель увидит только один сигнал.
Даже если бы вы знали, какой процесс отправил сигнал, у вас может не быть разрешения на запись в стандартный вывод отправителя.
Разумный способ сделать то, что вы хотите, — заставить процесс прослушивать сокет Unix. Когда в этом сокете есть соединение, запишите информацию о ходе выполнения в этом сокете. Пусть другой конец позаботится о том, чтобы напечатать его там, где он хочет.
Для запроса статуса можно использовать утилиту socket
, которая есть в некоторых дистрибутивах, или более мощную, но и более сложнуюsocat
.
socket -r./my-program-status # If the socket is a filesystem domain socket in the current directory
socat UNIX-CLIENT:my-program-status - # If the socket is a filesystem domain socket in the current directory
socat ABSTRACT-CLIENT:my-program-status - # If the socket is an abstract domain socket in the current directory
Сервер -боковая проверка -концепции -:
while date | socket -q -s./status; do echo.; done
Другой подход заключается в том, чтобы ваша программа периодически записывала свое состояние в файл.