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