All of lore.kernel.org
 help / color / mirror / Atom feed
* Triggering graceful bitbake shutdown
@ 2016-03-01 12:50 Tanu Kaskinen
  2016-03-04 17:58 ` Richard Purdie
  0 siblings, 1 reply; 5+ messages in thread
From: Tanu Kaskinen @ 2016-03-01 12:50 UTC (permalink / raw)
  To: bitbake-devel

Hi,

I wrote a small script that runs bitbake sequentially with multiple
MACHINE values. Sometimes I want to stop it with ctrl-c before it has
finished, but it didn't work properly out-of-the box when running
bitbake under the script (my script would not wait for bitbake to exit,
and bitbake threw some backtrace too). I then modified SIGINT handling
in my script so that it forwards the signal to bitbake and then waits
for bitbake to exit. The problem is that bitbake ignores SIGINT. The UI
handles python's KeyboardInterrupt exception, but that exception
doesn't get raised when bitbake runs under my script. I don't know what
triggers KeyboardInterrupt in normal conditions, since SIGINT doesn't
seem to be sufficient, does python perhaps monitor stdin to catch the
actual ctrl-c keypress?

Anyway, sending SIGTERM instead of SIGINT "works". However, the SIGTERM
handler shuts down bitbake immediately rather than waiting for the
current tasks to finish. Is that less safe than the normal ctrl-c
handling? If the immediate shutdown is equally safe, then I have no
problem, but if SIGTERM can cause state corruption so that resuming
later doesn't work reliably, then I'd like to have some way for
triggering graceful bitbake shutdown from my script. Any suggestions?

Or maybe there is already some way to run bitbake for multiple
MACHINEs, and I don't need to write any script myself?

-- 
Tanu


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Triggering graceful bitbake shutdown
  2016-03-01 12:50 Triggering graceful bitbake shutdown Tanu Kaskinen
@ 2016-03-04 17:58 ` Richard Purdie
  2016-03-05 10:41   ` Tanu Kaskinen
  0 siblings, 1 reply; 5+ messages in thread
From: Richard Purdie @ 2016-03-04 17:58 UTC (permalink / raw)
  To: Tanu Kaskinen, bitbake-devel

Hi,

On Tue, 2016-03-01 at 14:50 +0200, Tanu Kaskinen wrote:
> I wrote a small script that runs bitbake sequentially with multiple
> MACHINE values. Sometimes I want to stop it with ctrl-c before it has
> finished, but it didn't work properly out-of-the box when running
> bitbake under the script (my script would not wait for bitbake to
> exit,
> and bitbake threw some backtrace too). I then modified SIGINT
> handling
> in my script so that it forwards the signal to bitbake and then waits
> for bitbake to exit. The problem is that bitbake ignores SIGINT. The
> UI
> handles python's KeyboardInterrupt exception, but that exception
> doesn't get raised when bitbake runs under my script. I don't know
> what
> triggers KeyboardInterrupt in normal conditions, since SIGINT doesn't
> seem to be sufficient, does python perhaps monitor stdin to catch the
> actual ctrl-c keypress?
> 
> Anyway, sending SIGTERM instead of SIGINT "works". However, the
> SIGTERM
> handler shuts down bitbake immediately rather than waiting for the
> current tasks to finish. Is that less safe than the normal ctrl-c
> handling? If the immediate shutdown is equally safe, then I have no
> problem, but if SIGTERM can cause state corruption so that resuming
> later doesn't work reliably, then I'd like to have some way for
> triggering graceful bitbake shutdown from my script. Any suggestions?
> 
> Or maybe there is already some way to run bitbake for multiple
> MACHINEs, and I don't need to write any script myself?

I'm curious which bitbake process you're sending SIGINT to. If its the
knotty UI, it should shutdown gracefully. Other pieces of the system
ignore SIGINT since we really want the UI to do it. The behaviour you
mention above sounds suboptimal though.

I'm a bit pushed for time with the release stablisation at the moment
but would love to see if there is something better we can do here...

Cheers,

Richard


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Triggering graceful bitbake shutdown
  2016-03-04 17:58 ` Richard Purdie
@ 2016-03-05 10:41   ` Tanu Kaskinen
  2016-03-05 11:21     ` Tanu Kaskinen
  0 siblings, 1 reply; 5+ messages in thread
From: Tanu Kaskinen @ 2016-03-05 10:41 UTC (permalink / raw)
  To: Richard Purdie, bitbake-devel

On Fri, 2016-03-04 at 17:58 +0000, Richard Purdie wrote:
> Hi,
> 
> On Tue, 2016-03-01 at 14:50 +0200, Tanu Kaskinen wrote:
> > I wrote a small script that runs bitbake sequentially with multiple
> > MACHINE values. Sometimes I want to stop it with ctrl-c before it has
> > finished, but it didn't work properly out-of-the box when running
> > bitbake under the script (my script would not wait for bitbake to
> > exit,
> > and bitbake threw some backtrace too). I then modified SIGINT
> > handling
> > in my script so that it forwards the signal to bitbake and then waits
> > for bitbake to exit. The problem is that bitbake ignores SIGINT. The
> > UI
> > handles python's KeyboardInterrupt exception, but that exception
> > doesn't get raised when bitbake runs under my script. I don't know
> > what
> > triggers KeyboardInterrupt in normal conditions, since SIGINT doesn't
> > seem to be sufficient, does python perhaps monitor stdin to catch the
> > actual ctrl-c keypress?
> > 
> > Anyway, sending SIGTERM instead of SIGINT "works". However, the
> > SIGTERM
> > handler shuts down bitbake immediately rather than waiting for the
> > current tasks to finish. Is that less safe than the normal ctrl-c
> > handling? If the immediate shutdown is equally safe, then I have no
> > problem, but if SIGTERM can cause state corruption so that resuming
> > later doesn't work reliably, then I'd like to have some way for
> > triggering graceful bitbake shutdown from my script. Any suggestions?
> > 
> > Or maybe there is already some way to run bitbake for multiple
> > MACHINEs, and I don't need to write any script myself?
> 
> I'm curious which bitbake process you're sending SIGINT to. If its the
> knotty UI, it should shutdown gracefully. Other pieces of the system
> ignore SIGINT since we really want the UI to do it. The behaviour you
> mention above sounds suboptimal though.

The script only sends the signal to the direct child process, which
obviously won't work if knotty is in a different process and the direct
child deliberately ignores the signal. However, I also tried sending
SIGINT to all other bitbake processes from the command line with
"kill", and none of them responded to it.

> I'm a bit pushed for time with the release stablisation at the moment
> but would love to see if there is something better we can do here...

I suppose knotty could use a custom SIGINT handler rather than relying
on KeyboardInterrupt. If I then change my script to send the signal to
the knotty process instead of the direct child, that should work.

-- 
Tanu


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Triggering graceful bitbake shutdown
  2016-03-05 10:41   ` Tanu Kaskinen
@ 2016-03-05 11:21     ` Tanu Kaskinen
  2016-03-05 14:01       ` Tanu Kaskinen
  0 siblings, 1 reply; 5+ messages in thread
From: Tanu Kaskinen @ 2016-03-05 11:21 UTC (permalink / raw)
  To: Richard Purdie, bitbake-devel

On Sat, 2016-03-05 at 12:41 +0200, Tanu Kaskinen wrote:
> On Fri, 2016-03-04 at 17:58 +0000, Richard Purdie wrote:
> > Hi,
> > 
> > On Tue, 2016-03-01 at 14:50 +0200, Tanu Kaskinen wrote:
> > > I wrote a small script that runs bitbake sequentially with multiple
> > > MACHINE values. Sometimes I want to stop it with ctrl-c before it has
> > > finished, but it didn't work properly out-of-the box when running
> > > bitbake under the script (my script would not wait for bitbake to
> > > exit,
> > > and bitbake threw some backtrace too). I then modified SIGINT
> > > handling
> > > in my script so that it forwards the signal to bitbake and then waits
> > > for bitbake to exit. The problem is that bitbake ignores SIGINT. The
> > > UI
> > > handles python's KeyboardInterrupt exception, but that exception
> > > doesn't get raised when bitbake runs under my script. I don't know
> > > what
> > > triggers KeyboardInterrupt in normal conditions, since SIGINT doesn't
> > > seem to be sufficient, does python perhaps monitor stdin to catch the
> > > actual ctrl-c keypress?
> > > 
> > > Anyway, sending SIGTERM instead of SIGINT "works". However, the
> > > SIGTERM
> > > handler shuts down bitbake immediately rather than waiting for the
> > > current tasks to finish. Is that less safe than the normal ctrl-c
> > > handling? If the immediate shutdown is equally safe, then I have no
> > > problem, but if SIGTERM can cause state corruption so that resuming
> > > later doesn't work reliably, then I'd like to have some way for
> > > triggering graceful bitbake shutdown from my script. Any suggestions?
> > > 
> > > Or maybe there is already some way to run bitbake for multiple
> > > MACHINEs, and I don't need to write any script myself?
> > 
> > I'm curious which bitbake process you're sending SIGINT to. If its the
> > knotty UI, it should shutdown gracefully. Other pieces of the system
> > ignore SIGINT since we really want the UI to do it. The behaviour you
> > mention above sounds suboptimal though.
> 
> The script only sends the signal to the direct child process, which
> obviously won't work if knotty is in a different process and the direct
> child deliberately ignores the signal. However, I also tried sending
> SIGINT to all other bitbake processes from the command line with
> "kill", and none of them responded to it.
> 
> > I'm a bit pushed for time with the release stablisation at the moment
> > but would love to see if there is something better we can do here...
> 
> I suppose knotty could use a custom SIGINT handler rather than relying
> on KeyboardInterrupt. If I then change my script to send the signal to
> the knotty process instead of the direct child, that should work.

Hmm... now I realized that if it's normal for knotty to run in a
separate process and still get KeyboardInterrupts, there must be some
difference in how my script spawns bitbake compared to how the "main"
bitbake process spawns the knotty process. Adding a custom SIGINT
handler to knotty may still make sense, but that should not be required
to make this work.

-- 
Tanu


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Triggering graceful bitbake shutdown
  2016-03-05 11:21     ` Tanu Kaskinen
@ 2016-03-05 14:01       ` Tanu Kaskinen
  0 siblings, 0 replies; 5+ messages in thread
From: Tanu Kaskinen @ 2016-03-05 14:01 UTC (permalink / raw)
  To: Richard Purdie, bitbake-devel

On Sat, 2016-03-05 at 13:21 +0200, Tanu Kaskinen wrote:
> Hmm... now I realized that if it's normal for knotty to run in a
> separate process and still get KeyboardInterrupts, there must be some
> difference in how my script spawns bitbake compared to how the "main"
> bitbake process spawns the knotty process. Adding a custom SIGINT
> handler to knotty may still make sense, but that should not be required
> to make this work.

Sorry for the noise. The problem was that I spawned bitbake while
SIGINT was blocked in my script, and that was then inherited by the
child process. I removed the SIGINT block in the parent, and now
bitbake responds to ctrl-c just fine.

-- 
Tanu


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-03-05 14:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-01 12:50 Triggering graceful bitbake shutdown Tanu Kaskinen
2016-03-04 17:58 ` Richard Purdie
2016-03-05 10:41   ` Tanu Kaskinen
2016-03-05 11:21     ` Tanu Kaskinen
2016-03-05 14:01       ` Tanu Kaskinen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.