Диск NTFS при двойной загрузке стал доступен только для чтения

Конфликта нет; процесс по умолчанию будет находиться в уникальной группе процессов, которая является группой процессов его родителя:

$ cat pg.c
#include <stdio.h>
#include <unistd.h>
int main(void)
{
    fork();
    printf("pid=%d pgid=%d\n", getpid(), getpgrp());
}
$ make pg
cc     pg.c   -o pg
$./pg 
pid=12495 pgid=12495
pid=12496 pgid=12495
$ 

forkразделяет наш процесс на родительский(12495)и дочерний (12496), и дочерний процесс принадлежит к уникальной группе процессов родителя(12495). bashотклоняется от этого, потому что вызывает дополнительные системные вызовы:

$ echo $$
12366
$

А потом в другом терминале запускаем:

$ strace -f -o blah -p 12366

А потом обратно в первый терминал:

$./pg
pid=12676 pgid=12676
pid=12677 pgid=12676
$

Затем мы контролируем+c straceи проверяем системные вызовы:

$ egrep 'exec|pgid' blah
12366 setpgid(12676, 12676)             = 0
12676 setpgid(12676, 12676 <unfinished...>
12676 <... setpgid resumed> )           = 0
12676 execve("./pg", ["./pg"], [/* 23 vars */]) = 0
12676 write(1, "pid=12676 pgid=12676\n", 21 <unfinished...>
12677 write(1, "pid=12677 pgid=12676\n", 21 <unfinished...>

bashиспользовал вызов setpgidдля установки группы процессов, тем самым помещая наш процесс pgв группу процессов, не связанную с группой процессов оболочки.(setsid(2)— еще один способ настроить группу процессов, если вы ищете системные вызовы.)

1
28.07.2019, 16:54
1 ответ

В современных Windows есть так называемый быстрый запуск, который вызывает проблемы при двойной загрузке.

Если вы используете современную Windows (8 или 10 )и двойную загрузку, вы должны оставить ее выключенной

2
27.01.2020, 23:30

Теги

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