Ah, this is a very interesting hack. Let's just make sure no one in the outside world ever finds out and assumes this is officially supported. > diff --git a/loader/loader.c b/loader/loader.c > index 84fd116..6a701e4 100644 > --- a/loader/loader.c > +++ b/loader/loader.c > @@ -1712,6 +1712,13 @@ void loaderUsrXHandler(int signum) { > init_sig = signum; > } > > +int restart_anaconda() { > + if (access("/tmp/restart_anaconda", R_OK)) > + return 0; > + puts("Restarting Anaconda."); > + return 1; > +} > + Why puts here instead of fprintf? > diff --git a/scripts/restart-anaconda b/scripts/restart-anaconda > new file mode 100755 > index 0000000..aed4758 > --- /dev/null > +++ b/scripts/restart-anaconda > @@ -0,0 +1,55 @@ > +#! /bin/bash > +# > +# restart-anaconda: Debugging tool to restart stage2 Anaconda. > +# > +# Copyright (C) 2010 > +# Red Hat, Inc. All rights reserved. > +# > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 2 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see <http://www.gnu.org/licenses/>. > +# > + > +RESTART_FILE=/tmp/restart_anaconda > +LOADER_PID=`cat /var/run/loader.run` > +ANACONDA_PID=`cat /var/run/anaconda.pid` > + > +descendants() { > + PID=$1 > + DIRECT=`ps --ppid $PID -o pid=` > + INDIRECT='' > + for child in $DIRECT; do > + INDIRECT+=' '`descendants $child` > + done > + # prepend grandchildren, we are goingt to kill them first > + DESCENDANTS=$INDIRECT' '$DIRECT > + echo $DESCENDANTS > +} > + > +anaconda_descendants() { > + descendants $ANACONDA_PID > +} > + > +# this is how loader knows it should restart stuff > +touch $RESTART_FILE > + > +# kill all anaconda descendants and anaconda itself > +RESTART_VICTIMS=`anaconda_descendants` > +RESTART_VICTIMS+=' '$ANACONDA_PID > +echo "killing processes: " $RESTART_VICTIMS > +for child in $RESTART_VICTIMS; do > + kill -s KILL $child &>/dev/null > +done > + > +# give loader some time to pick up the restart file > +sleep 1 > +rm -f $RESTART_FILE Have you tried killing all processes in anaconda's process group and seeing what happens that way? If that worked, it could be a cleaner way of accomplishing the same thing as above, plus would handle arbitrarily deep trees of child processes. - Chris _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list