Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6286[/thread]

top, ps parsen? oder anders??: läuft ein perlprog schon? in LINUX (Seite 2)

Leser: 1


<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten
mordur
 2004-05-25 10:46
#82667 #82667
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
ja so weit läuft das dann, aber wenn der Anwender die shell killt dann killt er auch das Prog gleich mit. Muss ich da noch mal forken? wie ?

Code: (dl )
1
2
3
4
5
6
7
8
9
my $prog=fork();
if($prog){
fork && exit;
}
else
{
#??
}
#... programm geht weiter

müsste das prog in if oder eher else? oder ganz anders?
mordur
 2004-05-25 11:47
#82668 #82668
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
habs jetzt.
ABER: wie kann man es anstellen, das wenn ein Prozess von Hand gekillt wird, vorher noch eine Aktion durchgeführt wird, wie zb das löschen einer dazugehörigen Datei?
Crian
 2004-05-25 12:33
#82669 #82669
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=Ishka,25.05.2004, 00:05]durch fork && exit ändert sich die Pid - aber in $$ steht dann automatisch die neue drin.[/quote]
das meinte ich

[quote=mordur,25.05.2004, 08:46]ja so weit läuft das dann, aber wenn der Anwender die shell killt dann killt er auch das Prog gleich mit. Muss ich da noch mal forken? wie ?

Code: (dl )
1
2
3
4
5
6
7
8
9
my $prog=fork();
if($prog){
fork && exit;
}
else
{
#??
}
#... programm geht weiter

müsste das prog in if oder eher else? oder ganz anders?[/quote]
einfach
Code: (dl )
fork && exit;

Daunter den Code für den Sohn weiterführen. Hier ermittelte $$ stimmt dann auch.\n\n

<!--EDIT|Crian|1085474166-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Dubu
 2004-05-26 13:37
#82670 #82670
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=mordur,25.05.2004, 09:47]wie kann man es anstellen, das wenn ein Prozess von Hand gekillt wird, vorher noch eine Aktion durchgeführt wird, wie zb das löschen einer dazugehörigen Datei?[/quote]
Das kommt darauf an, wie gekillt wird. Man kann alle Signale abfangen, ausser SIGKILL. Naeheres siehe perlipc, erster Abschnitt (Signals).
mordur
 2004-05-26 15:39
#82671 #82671
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
mit
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
my $sys=fork();
if($sys)
{
exit;
}
else
{
my $sys2=fork();
if($sys2)
{
exit;
}
else
{
$SIG{INT}=\deleteFile();
#tu was
exit (0);
}
exit(0);
}

scheint es nicht zu gehen. wenn ich irgendwas auf der shell tippe nachdem das Prog gestartet ist, wird sofort deleteFile ausgeführt. Das soll aber zb. auch dann nicht passieren, wenn ich die shell mit exit zumache. Eigentlich nur wenn ich den prozess mit kill und PID abschiesse.
betterworld
 2004-05-26 16:03
#82672 #82672
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
man start-stop-daemon
mordur
 2004-05-26 16:19
#82673 #82673
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=betterworld,26.05.2004, 14:03]man start-stop-daemon[/quote]
hab ich gelesen und ??? wie benutze ich das? was kann mich damit tun?
betterworld
 2004-05-26 18:51
#82674 #82674
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=mordur,26.05.2004, 14:19][quote=betterworld,26.05.2004, 14:03]man start-stop-daemon[/quote]
hab ich gelesen und ??? wie benutze ich das? was kann mich damit tun?[/quote]
Damit kannst Du ein ganz normales Script im Hintergrund starten. Ausserdem wird automatisch eine PID-Datei angelegt (siehe auch hier (Link)), die Dir garantiert, dass der Daemon nur einmal gleichzeitig gestartet wird. Wenn Du Anwendungsbeispiele suchst, guck Dir mal die Skripte in /etc/init.d an.\n\n

<!--EDIT|betterworld|1085583142-->
ronald
 2004-05-27 10:17
#82675 #82675
User since
2003-08-15
76 Artikel
BenutzerIn
[default_avatar]
nochmal zu deinen Fragen bzgl. einer Datei, mit der man erkennen kann, dass das Programm schon läuft.

Es gibt die Möglichkeit, eine Datei anzulegen und dann eine Sperre aufzubauen.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use Fcntl ':flock';
use diagnostics;
my @sw_lockarray;
use vars qw($verbose);

sub lock_file {
my $filename=shift;
my $lock;
if (! open($lock, "> $filename")) {
print "ERROR: Can't open lockfile $filename: $!\n";
return(0);
}
if (flock($lock, LOCK_EX | LOCK_NB)) {
print "Lock erhalten\n" if $verbose;
push(@sw_lockarray, $lock);
print($lock "$$\n");
chmod 0666, $filename;
return(1);
} else {
warn "Lock $filename nicht erhalten\n";
return(0);
}
}


Wenn das Programm abstürzt oder beendet wird, dann wird die Dateisperre vom Betriebssystem automatisch wieder freigegeben.

AFAIK funktioniert das unter Windows nicht.
Crian
 2004-05-27 17:36
#82676 #82676
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Wie ich es schonmal sagte, machst Du Dir das Leben unnötig schwer.

Statt

[quote=mordur,26.05.2004, 13:39]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
my $sys=fork();
if($sys)
   {
    exit;
    }
else
  {
  my $sys2=fork();
  if($sys2)
          {
            exit;
           }
   else
          {
          $SIG{INT}=\deleteFile();
          #tu was
          exit (0);
         }
  exit(0);
}

[/quote]

reicht doch

Code: (dl )
1
2
3
4
fork && exit;
fork && exit;
$SIG{INT}=\deleteFile();
#tu was


völlig aus. Macht die Sache irgendwie übersichtlicher und leichter zu lesen.\n\n

<!--EDIT|Crian|1085665088-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 3 >| >> 24 Einträge, 3 Seiten



View all threads created 2004-05-24 14:44.