phpbar.de logo

Mailinglisten-Archive

[php] Signale und system()

[php] Signale und system()

Andreas Schröder andreas.schroeder at oracle.com
Mit Jun 21 12:19:29 CEST 2006


Hallo,

ich glaube, ich habs jetzt. OK, es ist alles ein ziemlicher Hack...


folgende Restore-Funktion wird aufgerufen:


function restore_partition($device, $path, $filename) {

    if(!file_exists($path."/".$filename)) {
        die("\nfile error\n");
        }
       
    if(!file_exists("/dev/".$device)) {
        die("\ndevice error\n");
        } 
   
    echo "\nProceed? (yes / no)\n";
   
    while( ($selection3 != "yes") && ($selection3 != "no") )
        {
        fscanf(STDIN, "%s", $selection3);
        }
               
    if(strstr($selection3, "no")) die("\naborting\n");
   
    echo "\n\nPlease stand by until the process is finnished.\n\n";
   
    system("nohup dd if=".$path."/".$filename." bs=16065 2>/dev/null | 
gunzip -c 2>/dev/null | mbuffer 2>/dev/null | dd bs=16065 
of=/dev/".$device." 2>/dev/null >/dev/null &");

    }


Der Vorgang wird im Hintergrund gestartet und mbuffer zeigt immer schön 
die aktuellen Transferraten an.

In der .bashrc steht folgendes:

trap '' 2
~/rescue.php
PID=`pidof dd | awk '{print $1}'`
while ps -p $PID >/dev/null ; do
    sleep 1
done
echo ""
echo "Restore seems so be successful."
echo ""
logout

Der Nutzer kann den Prozess nicht abbrechen und wird danach ausgeloggt. 
Sinn davon ist, dass er keine Root-Rechte benötigt (dd ist suid) und nur 
machen kann, was das Menü im PHP-Skript ihm bietet.

Gruss, Andreas






php::bar PHP Wiki   -   Listenarchive