Eu não sei, mas com um stick USB aleatório e um programa
$ df | grep Vol
/dev/disk1s2 12228 20 12208 1% 512 0 100% /Volumes/Firmware
$ perl -E 'say $$; chdir "/Volumes/Firmware" or die "nope $!"; sleep 9999'
66433
Podemos, de fato, parar a ejeção, mas antes disso precisamos de alguma depuração do processo, aqui fornecida pelo DTrace em algum outro terminal
$ sudo dtruss -p 66433
...
E, em seguida, o que em inglês é chamado de botão de ejeção de força, alguns cliques, atrasos e avisos depois, o programa de teste ainda está em execução e o stick USB desmontado e dtruss
não mostrou nada:
...
^C
$ lsof -p 66433 | grep cwd
perl5.26 66433 jhqdoe cwd cwd|rtd info error: No such file or directory
$
Assim, pelo menos para um programa unix padrão, nada aconteceu além do ponto de montagem ser removido por baixo dele. Em seguida, podemos testar escrever algo no ponto de montagem, novamente com um programa unix padrão
$ cat writeslow
#!/usr/bin/env perl
use 5.14.0;
use warnings;
open( my $fh, ">", "/Volumes/Firmware/mlatu" ) or die "nope $!";
while (1) {
syswrite( $fh, "mlatu\n" ) or warn "hmm $!";
sleep 3;
}
$ perl writeslow
e em outros lugares, confirmamos que os gatos estão aparecendo (o buffer pode ser um problema se você usar alguma função de gravação de nível superior)
$ cat /Volumes/Firmware/mlatu
mlatu
mlatu
$
e novamente forçamos a ejetar, e o programa percebe isso (mas continua rodando, porque foi escrito dessa forma):
$ perl writeslow
hmm Input/output error at writeslow line 7.
hmm Input/output error at writeslow line 7.
para que o Mac OS X 10.11 (para este hardware é muito antigo para executar o macOS) não faz nada para "tentar obter processos para fechar identificadores de arquivos abertos", como afirmado na pergunta, e não há provas "algum tipo de sinal [ é enviado] para os processos que possuem esses identificadores de arquivo "acontece; em vez disso, o processo continua sendo executado e, se ocorrer algum tipo de verificação de erros, talvez ele falhe, dependendo de como foi escrito.
Pelo menos para programas unix padrão que possuem o unix padrão cwd
e usam chamadas de E / S padrão; Talvez os programas da Apple sejam de alguma forma diferentes? Vamos remontar o stick usb novamente e abrir o arquivo mlatu
com Hex Fiend.app
...
$ open -a Hex\ Fiend /Volumes/Firmware/mlatu
$ lsof | grep mlatu
Hex\x20Fi 66642 jhqdoe 8r REG 1,5 216 7 /Volumes/Firmware/mlatu
$
(ou use TextEdit
ou algo assim se você não tiver Hex Fiend
instalado) e mais uma vez faça a força ejetar a dança ...
$ screencapture -w error.png
$
e agora recebemos uma mensagem diferente da dos programas unix padrão e nenhuma opção para forçar a desmontagem.