----- Original Message -----
> From: "wharms" <wha...@bfs.de>
> Subject: signal handling in mysql cli
> 
> when i use CTRL-C to break a query that works fine in interactive mode.
> 
> but when i use the noninteractive mode
> i looks like that  but "show full processlist;" shows otherwise and that is 
> true

This may sound silly, but you're basically saying that you can't interact with 
it while in non-interactive mode...

My understanding may be wrong, but this is how it works in my mind:
 * when in the client, the client intercepts the ctrl-c and interprets it as 
"kill this query on the server".
 * when in non-interactive mode, the client is not actually reading your 
keypresses. Thus, the ctrl-c gets intercepted by the *shell*, which does 
exactly what you ask by killing the MySQL client process.

Now, if the mysql client does not explicitly intercept kill signals - which, 
honestly, most programs have no reason to - that means it doesn't even get a 
chance to send the "cancel that query" order, it just dies.

A lot of debate could be put in on wether or not the client needs to intercept 
and send a cancel, but personally I'm leaning towards "no, it doesn't" - if you 
don't have a transaction open, or don't even have a transactional engine (which 
used to be default!) cancelling would leave your database in an inconsistent 
state. Much better, then, to allow whatever query you sent to continue, on the 
off chance that it's something that it does not damage, or only does things 
that you can reverse afterwards. If you really want to kill that query, you 
always have the option of logging into the server and shooting it yourself.

/johan


-- 
Unhappiness is discouraged and will be corrected with kitten pictures.

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to