execute bash?
Puming via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Apr 8 16:16:12 PDT 2016
On Friday, 8 April 2016 at 16:16:27 UTC, Adam D. Ruppe wrote:
> On Friday, 8 April 2016 at 15:31:13 UTC, Puming wrote:
>> The D version behavior is strange.
>
> Are you still calling bash? Cuz that is going to complicate
> things a lot because bash does its own signal handling too and
> could be intercepting it.
No, this happens in a simple demo program:
import std.stdio;
import std.process;
import core.stdc.signal;
import core.thread;
import std.datetime;
extern(C) void sig_hand(int signal) nothrow @nogc @system {
import core.stdc.stdio: printf;
printf("signal %d catched!\n", signal);
}
void main() {
if (signal(SIGINT, &sig_hand) == SIG_ERR) {
writeln("can't catch SIGINT");
}
string line;
write("> ");
while(1) {
Thread.sleep(1.seconds);
}
}
But after trying again on my machine, it behaved the same as in
the C code.
Maybe I got the wrong behavior last night due to running it on a
remote server.
>
>> When Using while with readln, after hitting Ctrl-C, the next
>> readln will throw exception:
>
> This is normal though. If a signal interrupts a read/write
> call, it returns an error saying it was interrupted so you can
> choose to abort or try again. (this way you can catch ctrl+c to
> cancel input)
Thanks, so I'll just catch it.
More information about the Digitalmars-d-learn
mailing list