Michael N.: Prozessabfrage

Beitrag lesen

Hallo Stefan,

ich starte zwei Perlprogramme gleichzeitig mit einem cronjob!
Möchte aber das, das zweite perlprogramm erst gestartet wird, wenn das erste sich beendet hat.
Wie kann ich abfragen ob sich das erste Perlprogramm schon beendet ist?

Das klingt mir schwer danach, als ob Du in Perl Semaphore einbauen willst. Ich habe zwar selber nichts mit Perl zu tun, mußte sowas aehnliches aber mal in VBA verwirklichen. Vielleicht kannst Du aus meinen VBA-Code-Schnipseln was machen.

<VBA-Code>

Function SetSemaphore(iStatus As Integer) As Integer

'******************************************************************
'Date       Version     Status      Author
'29.07.1999 1.0         develop     mnikolai
'******************************************************************
'Version    changed because of
'1.0        introduction
'******************************************************************
'used and referenzed functions / sheet / files
'** mistake()
'******************************************************************
'Parameters
'IN
'OUT
'   True / False
'******************************************************************
'Short description
' sets and resets the semaphore

On Error GoTo err_SetSemaphore
    Const N_Fkt = "Fct. SetSemaphore()"
    Dim ierr     As Integer
    Dim iErrInd  As Integer
    Dim iErrFlag As Integer
    Dim fhandle  As Integer
    
    Select Case iStatus
        Case i_ON
            fhandle = FreeFile()
            If (Dir("C:\sema.txt") <> "") Then
                SetSemaphore = False
            Else
                Open "C:\sema.txt" For Output As #fhandle
                Print #fhandle, "Used"
                Close #fhandle
                SetSemaphore = True
            End If
        Case i_OFF
            If (Dir("C:\sema.txt") = "") Then
                SetSemaphore = False
            Else
                Kill "C:\sema.txt"
                SetSemaphore = True
            End If
        Case Else
            SetSemaphore = False
    End Select

exit_SetSemaphore:
    Exit Function

mistake_SetSemaphore:
    SetSemaphore = False
    GoTo exit_SetSemaphore

err_SetSemaphore:
    If (iErrInd = i_OFF) Then
        iErrFlag = True
        Resume Next
    End If
    ierr = Err
    ierr = mistake(ierr, N_Fkt)
    SetSemaphore = False
    Resume exit_SetSemaphore
    
End Function

Function CheckSemaphore() As Integer

'******************************************************************
'Date       Version     Status      Author
'29.07.1999 1.0         develop     mnikolai
'******************************************************************
'Version    changed because of
'1.0        introduction
'******************************************************************
'used and referenzed functions / sheet / files
'** mistake()
'******************************************************************
'Parameters
'IN
'OUT
'   True / False
'   in errorcase -2
'******************************************************************
'Short description
' Checks whether a semaphore is on

On Error GoTo err_CheckSemaphore
    Const N_Fkt = "Fct. CheckSemaphore()"
    Dim ierr As Integer
    
    If (Dir("C:\sema.txt") <> "") Then
        CheckSemaphore = True
    Else
        CheckSemaphore = False
    End If

exit_CheckSemaphore:
    Exit Function

mistake_CheckSemaphore:
    CheckSemaphore = -2
    GoTo exit_CheckSemaphore

err_CheckSemaphore:
    ierr = Err
    ierr = mistake(ierr, N_Fkt)
    CheckSemaphore = -2
    Resume exit_CheckSemaphore
    
End Function

</VBA-Code>

Beide Programme enthalten dann in dem kritischen gemeinsamen Bereich vorher eine Schleife, die solange läuft, bis die Semaphore offen ist. Danach wird die Semaphore geschlossen und beim Verlassen des kritischen Bereiches wieder geöffnet, damit der wartende Prozess weiterarbeiten kann.

Wenn Du das ganze jetzt nach Perl transferierst, kannst Du ja evtl. zwei oder drei kleine Shell-Batch-Programme draus machen, die das Semaphoren Schließen, -Öffnen und -Prüfen übernehmen und die Du aus den Scripts heraus aufrufst.

Danke fuer eure Hilfe!

Gern geschehen.

Gruss,

Michael N.

PS.: Ich habe den Hinweis von Martin Speiser und Stefan Einspender gelesen, denke mir aber, daß Stefan durchaus mehrer Adressen haben könnte und uns hier nur verwirren will.