The answer is indeed provided by Jonathan Worthington:
https://irclog.perlgeek.de/perl6-dev/2017-04-04
In short, shell () returns a Proc object. At the moment when this object is sunk, it will throw an exception, which it is internal if the program launch failed.
$ 6 'dd shell("/usr/bin/false")'
Proc.new(in => IO::Pipe, out => IO::Pipe, err => IO::Pipe, exitcode => 1, signal => 0, command => ["/usr/bin/false"])
, , Proc , :
$ 6 'my $result = shell("/usr/bin/false"); say "Got to the end"'
Got to the end
$result.exitcode, , .