Size: a a a

2021 July 23

GK

Grigoriy Koudrenko in Modern::Perl
ну шел так и пешт в мане
   Simple Commands
      A simple command is a sequence of optional variable assignments followed by blank-separated words and redirections, and terminated by a control operator.  The first word specifies the  command  to  be
      executed, and is passed as argument zero.  The remaining words are passed as arguments to the invoked command.

      The return value of a simple command is its exit status, or 128+n if the command is terminated by signal n.
источник

AK

Andrey Konovalov in Modern::Perl
Если кто-то делает exit (128+9) - это немного некорректно же?
источник

GK

Grigoriy Koudrenko in Modern::Perl
Ну так об этом Керрикс и писал, что в принципе возвращать код больше 128 можно с точки зрения сискола, но плохо потому что шел делает 128 + n если  процесс завершается по сигналу
источник
2021 July 24

GK

Grigoriy Koudrenko in Modern::Perl
а &255 это больше линуксовая фишка (про остальные nix не знаю), но не определена в стандарте, дело в том что в wait возвращается два байта, если младший 0, то в старшем код из exit, в противном случае в младшем  номер сигнала и информация о coredump, (ну и есть еще два статуса когда в младшем 0x7F и когда весь код wait 0xFFFF, но это отдельная тема)
источник

VG

Vadim Goncharov in Modern::Perl
да везде так
источник

SZ

Sergey Zhmylove in Modern::Perl
А нафига это всё нужно, если шелл всё равно до байта порежет?
источник

SZ

Sergey Zhmylove in Modern::Perl
@PerlBanjoBot $ perl -e exit,256 && echo ok
источник

P

PerlBanjoBot in Modern::Perl
источник

GK

Grigoriy Koudrenko in Modern::Perl
ну это скорее на уровне парсинга значения, которое wait возвращает
источник

VG

Vadim Goncharov in Modern::Perl
шелл даже до 7 бит порежет
источник

VG

Vadim Goncharov in Modern::Perl
ну, не совсем
источник

GK

Grigoriy Koudrenko in Modern::Perl
а так работать не будет:
$ strace perl -e 'exit,256'
...
rt_sigaction(SIGCHLD, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
brk(0x55866c07b000)                     = 0x55866c07b000
close(3)                                = 0
rt_sigaction(SIGHUP, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
...

Перл не вызывает exit в таком случае
источник

VG

Vadim Goncharov in Modern::Perl
как это не вызывает? вызывает
источник

GK

Grigoriy Koudrenko in Modern::Perl
Ой вру
источник

GK

Grigoriy Koudrenko in Modern::Perl
не туда смотрел
источник

VG

Vadim Goncharov in Modern::Perl
perl -e 'exit 256; exit 3'
на выходе ноль, то есть сработал первый
источник

GK

Grigoriy Koudrenko in Modern::Perl
rt_sigaction(SIGIO, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
exit_group(0)                           = ?
+++ exited with 0 +++
источник

GK

Grigoriy Koudrenko in Modern::Perl
Да он вызывает exit_group(0)
источник

GK

Grigoriy Koudrenko in Modern::Perl
Но вот тут говорили про errno, я думаю вряд-ли разработчик будет пихать значение  errno  в exit
источник

VG

Vadim Goncharov in Modern::Perl
68582 perl     0.003108 CALL  exit(0x100)
источник