Autossh перезапускает соединения SSH по мере необходимости, если пользователь не прерывает соединение:
If the ssh process exited normally (for example, someone typed "exit" in an interactive session), autossh exits rather than restarting;
(из АвтосшREADME.txt
).
Autossh улучшает поведение SSH в случае сбоя SSH или разрыва соединения по какой-либо причине, но он не будет поддерживать соединение для вас, если вы закроете соединение самостоятельно.
Добро пожаловать в StackExchange для Unix и Linux!
Этот вопрос лучше ответить на Stack Overflow , сайте StackExchange, посвященном вопросам программирования. Но все же...
В архитектуре x86 стандартная страница памяти имеет размер 4 КиБ или 0x1000 байт. Страницы памяти начинаются с адреса 0 и размещаются непрерывно без перекрытия.
Чтобы найти начальный адрес страницы памяти:
beginning of page = memory address AND (NOT page size - 1)
Таким образом, если у вас есть адрес 0x400a80, начало этой страницы = 0x400a80 И (НЕ 0x000fff )= 0x400a80 И 0xfff000 = 0x400000.
Если вы ищете начало страницы, содержащей ячейку памяти, вы можете использоватьsysconf(_SC_PAGE_SIZE)
для получения размера системной страницы и округлить до этого:
void *alloc;
long pagesz;
pagesz = sysconf(_SC_PAGESIZE);
printf("Default page size: %ld\n", pagesz);
alloc = malloc(512 * 1024 * 1024);
printf("512MiB allocated at %zx\n", alloc);
printf("The corresponding page starts at %zx\n", (((off_t) alloc) / pagesz) * pagesz);
Это может ввести в заблуждение в обстоятельствах, когда размеры страниц различаются, например. при использовании огромных отображений в Linux.
Если вы ищете начало выделения адресного пространства, содержащее ячейку памяти, я не знаю переносимого способа сделать это. В Linux интерфейс для получения информации о сопоставлении — это /proc/self/maps
, поэтому вам нужно будет открыть и проанализировать его.