RedHat Linux kernel: ce noyau est le mieux?

  • andrushok
  • Novice
  • Novice
  • Avatar de l’utilisateur
  • Inscription: Mai 21, 2004
  • Messages: 24
  • Status: Offline

Message Mai 21st, 2004, 11:34 am

J'ai installé RedHat 9 sur un serveur et la mise à niveau du noyau jusqu'à nouvelle version: kernel-smp-2.4.20-31.9 Certains ma demande a cessé de travailler. Je débuggé et dans la probem:

après le fork () je tente de verrouiller des fichiers en utilisant lockf (). Le déjeuner des enfants, je branche la nouvelle application à l'aide execl (). Habituellement (sur un Unix et RedHat 7.1), l'enfant garde le processus de verrouillage. Toutefois, dans ce cas, l'enfant le processus de perte de verrouillage et de mon travail d'application erronée. :shock:

J'ai rétrogradé à noyau kernel-smp-2.4.20-28.9 et de l'appication commencé à travailler amende.

J'ai vérifié sur la liste des bogues http://www.redhat.com et n'a rien trouvé à ce sujet. Est-ce que sombody entendu parler de ce problème?
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Mai 21st, 2004, 11:34 am

  • b_heyer
  • Web Master
  • Web Master
  • Avatar de l’utilisateur
  • Inscription: Juin 15, 2003
  • Messages: 4583
  • Loc: Maryland
  • Status: Offline

Message Mai 21st, 2004, 8:53 pm

Très probablement vous manque un module ou un colis lorsque vous avez compilé le nouveau noyau.
Pixel Acres V2
  • andrushok
  • Novice
  • Novice
  • Avatar de l’utilisateur
  • Inscription: Mai 21, 2004
  • Messages: 24
  • Status: Offline

Message Mai 24th, 2004, 7:01 am

Qu'est-ce que le paquet ne me manquer? Je downloades RPM à partir ftp.redhat.com et l'a installé en utilisant la commande rpm. Je ne compile pas les grains.

J'ai le code testé
Code: [ Select ]
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>

int main( int args, char* argv[])
{
    pid_t spid = getpid();
    if( args == 1 )
        printf( "\n\n[%d]: Parent process started\n", spid);
    else if( args == 3 )
    {
        printf( "[%d]: Child process started\n", spid);
        sleep( 15);
        
        printf( "[%d]: Child process done!!!\n", spid);

        return 0;
    }

    pid_t pid = fork();
  int status;

  switch( pid )
  {
  case -1:
        printf( "[%d] fork failed.\n", spid);
        exit( 0);

    case 0:
    {
            pid_t pid = getpid();
            printf( "[%d]->[%d] Child forked\n", spid, pid);

            int hOutFile = creat( "test.out", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH
| S_IWOTH);

            int rl = lockf( hOutFile, F_LOCK, 100);
            if( !rl )
                printf( "[%d]->[%d] File 'test.out' locked\n", spid, pid);
            else
            {
                printf( "[%d]->[%d] File 'test.out' did not lock, process failed\n", spid
, pid);
                exit( 0);
            }

        if( execl( argv[0], argv[0], "-child", "-pending", NULL) == -1 )
        {
                printf( "[%d]->[%d] Execute '%s' failed\n", spid, pid, argv[0]);
                exit( 0);
        }
        }
    default:
printf( "[%d] Parent forked\n", spid);
        break;
    }
    printf( "[%d] Sleep 10 seconds.\n", spid);

    sleep( 10);
    printf( "[%d] Check lock (should be locked!).\n", spid);

    int hOutFile = open( "test.out", O_RDONLY);

    int rl = lockf( hOutFile, F_TEST, 100);
    printf( "[%d] Lock of file '%d' is %d.\n", spid, hOutFile, rl);

    printf( "[%d] Sleep 10 seconds.\n", spid);
    sleep( 10);

    printf( "[%d] Wake up!, check lock (should be NOT locked!).\n", spid);
    rl = lockf( hOutFile, F_TEST, 100);
    printf( "[%d] Lock of file '%d' is %d.\n", spid, hOutFile, rl);

    printf( "[%d] Parent Done!!!\n", spid);
    return 0;
}
  1. #include <fcntl.h>
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <sys/types.h>
  6. #include <sys/stat.h>
  7. #include <sys/wait.h>
  8. int main( int args, char* argv[])
  9. {
  10.     pid_t spid = getpid();
  11.     if( args == 1 )
  12.         printf( "\n\n[%d]: Parent process started\n", spid);
  13.     else if( args == 3 )
  14.     {
  15.         printf( "[%d]: Child process started\n", spid);
  16.         sleep( 15);
  17.         
  18.         printf( "[%d]: Child process done!!!\n", spid);
  19.         return 0;
  20.     }
  21.     pid_t pid = fork();
  22.   int status;
  23.   switch( pid )
  24.   {
  25.   case -1:
  26.         printf( "[%d] fork failed.\n", spid);
  27.         exit( 0);
  28.     case 0:
  29.     {
  30.             pid_t pid = getpid();
  31.             printf( "[%d]->[%d] Child forked\n", spid, pid);
  32.             int hOutFile = creat( "test.out", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH
  33. | S_IWOTH);
  34.             int rl = lockf( hOutFile, F_LOCK, 100);
  35.             if( !rl )
  36.                 printf( "[%d]->[%d] File 'test.out' locked\n", spid, pid);
  37.             else
  38.             {
  39.                 printf( "[%d]->[%d] File 'test.out' did not lock, process failed\n", spid
  40. , pid);
  41.                 exit( 0);
  42.             }
  43.         if( execl( argv[0], argv[0], "-child", "-pending", NULL) == -1 )
  44.         {
  45.                 printf( "[%d]->[%d] Execute '%s' failed\n", spid, pid, argv[0]);
  46.                 exit( 0);
  47.         }
  48.         }
  49.     default:
  50. printf( "[%d] Parent forked\n", spid);
  51.         break;
  52.     }
  53.     printf( "[%d] Sleep 10 seconds.\n", spid);
  54.     sleep( 10);
  55.     printf( "[%d] Check lock (should be locked!).\n", spid);
  56.     int hOutFile = open( "test.out", O_RDONLY);
  57.     int rl = lockf( hOutFile, F_TEST, 100);
  58.     printf( "[%d] Lock of file '%d' is %d.\n", spid, hOutFile, rl);
  59.     printf( "[%d] Sleep 10 seconds.\n", spid);
  60.     sleep( 10);
  61.     printf( "[%d] Wake up!, check lock (should be NOT locked!).\n", spid);
  62.     rl = lockf( hOutFile, F_TEST, 100);
  63.     printf( "[%d] Lock of file '%d' is %d.\n", spid, hOutFile, rl);
  64.     printf( "[%d] Parent Done!!!\n", spid);
  65.     return 0;
  66. }


La sortie normale est:
Code: [ Select ]
[10314]: Parent process started
[10314]->[10315] Child forked
[10314]->[10315] File 'test.out' locked
[10315]: Child process started
[10314] Parent forked
[10314] Sleep 10 seconds.
[10314] Check lock (should be locked!).
[10314] Lock of file '3' is -1.            (!!!!) this is fine!
[10314] Sleep 10 seconds.
[10315]: Child process done!!!
[10314] Wake up!, check lock (should be NOT locked!).
[10314] Lock of file '3' is 0.
[10314] Parent Done!!!
  1. [10314]: Parent process started
  2. [10314]->[10315] Child forked
  3. [10314]->[10315] File 'test.out' locked
  4. [10315]: Child process started
  5. [10314] Parent forked
  6. [10314] Sleep 10 seconds.
  7. [10314] Check lock (should be locked!).
  8. [10314] Lock of file '3' is -1.            (!!!!) this is fine!
  9. [10314] Sleep 10 seconds.
  10. [10315]: Child process done!!!
  11. [10314] Wake up!, check lock (should be NOT locked!).
  12. [10314] Lock of file '3' is 0.
  13. [10314] Parent Done!!!

Toutefois, si j'ai appliqué le nouveau noyau, j'ai le texte suivant:
Code: [ Select ]
[10314]: Parent process started
[10314]->[10315] Child forked
[10314]->[10315] File 'test.out' locked
[10315]: Child process started
[10314] Parent forked
[10314] Sleep 10 seconds.
[10314] Check lock (should be locked!).
[10314] Lock of file '3' is 0.              (!!!!) ERROR!
[10314] Sleep 10 seconds.
[10315]: Child process done!!!
[10314] Wake up!, check lock (should be NOT locked!).
[10314] Lock of file '3' is 0.
[10314] Parent Done!!!
  1. [10314]: Parent process started
  2. [10314]->[10315] Child forked
  3. [10314]->[10315] File 'test.out' locked
  4. [10315]: Child process started
  5. [10314] Parent forked
  6. [10314] Sleep 10 seconds.
  7. [10314] Check lock (should be locked!).
  8. [10314] Lock of file '3' is 0.              (!!!!) ERROR!
  9. [10314] Sleep 10 seconds.
  10. [10315]: Child process done!!!
  11. [10314] Wake up!, check lock (should be NOT locked!).
  12. [10314] Lock of file '3' is 0.
  13. [10314] Parent Done!!!

Que dois-je besoin d'ajouter le nouveau noyau pour restaurer normale de travail selon la norme POSIX?

Afficher de l'information

  • Total des messages de ce sujet: 3 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 77 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC