problemi riavvio immotivato portatile in stato di inattività

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
NicoMetal
Linux 2.x
Linux 2.x
Messaggi: 380
Iscritto il: dom 2 mag 2010, 18:21
Nome Cognome: Nicola
Slackware: current64
Kernel: 4.3
Desktop: kde5 - FluxBox
Località: Verona

problemi riavvio immotivato portatile in stato di inattività

Messaggio da NicoMetal »

Ciao, ho un problema in cui non so nemmeno da dove cominciare per risolvere.
Poco tempo fa mi feci questo programma in C come sveglia (molto semplice e alla veloce e senza tanti controlli tanto è solo per uso personale):

Codice: Seleziona tutto

#include <time.h>
#include <stdlib.h>
#include <stdio.h>

#define DEFAULT_HOUR 8
#define DEFAULT_MIN  0

  int main( int argc, char *argv[] )
  {
          
        struct tm *ora, *sveglia =malloc(sizeof(struct tm) );
        int riferimento;
        time_t tm_act;
        
        
        switch( argc ){
                case 1: //Caso in cui non vengono immessi argomenti ora di default 8.00.
                       sveglia->tm_hour= DEFAULT_HOUR;
                       sveglia->tm_min= DEFAULT_MIN;
                       break;

                default:
                        sveglia->tm_hour= atoi( argv[1] );
                        sveglia->tm_min =atoi( argv[2] );
                        break;

        }


        tm_act =time(NULL);
        ora =localtime( &tm_act );
        riferimento =ora->tm_min;

        printf( "\n\n*** Ora attuale: %d:%d:00 ***\n", ora->tm_hour, ora->tm_min );
        printf( "\n*** Sveglia alle: %d:%d:00 ***\n", sveglia->tm_hour, sveglia->tm_min );

        while( ora->tm_hour != sveglia->tm_hour || ora->tm_min != sveglia->tm_min ){
                tm_act =time(NULL);
                ora =localtime( &tm_act );
        
                if(ora->tm_min == riferimento+30){
                     printf( "\n\n*** Ora attuale: %d:%d:00 ***\n", ora->tm_hour, ora->tm_min );
                        printf( "\n*** Sveglia alle: %d:%d:00 ***\n", sveglia->tm_hour, sveglia->tm_min );
                        riferimento =ora->tm_min;
                }

        }

        printf( "\nE' l'ora!\n" );
        system( "suona.sh" );
                        
        

        return 0;
  }

FInchè è sul fisso tutto ok. Mentre quando lo uso sul portatile spesso (al risveglio) mi ritrovo il pc riavviato che mi chiede nome e password. Non so e non credo sia il programma in quanto sul fisso questo problema non si è mai presentato, però per sicurezza metto tutto non si sa mai. Qualcuno sa dirmi la causa di questi riavvi e come potrei risolvere? Grazie in anticipo.

Avatar utente
SIV
Linux 3.x
Linux 3.x
Messaggi: 921
Iscritto il: mer 25 apr 2007, 14:07

Re: problemi riavvio immotivato portatile in stato di inatti

Messaggio da SIV »

Ma hai controllato magari con dmesg se c'è stata qualche anomalia?

Offtopic: Sbaglio o esegue tanti cicli quanto il tuo processore permette nell'intervallo di tempo "Ora attuale - Sveglia"?
Non puoi ricontrollare l'orario attuale ad intervalli di tempo più lunghi? Mi sembra uno spreco enorme quell'infinità di cicli :|

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: problemi riavvio immotivato portatile in stato di inatti

Messaggio da 414N »

:-k
Fammi capire, hai imbastito questo programma per far emettere dei suoni al PC (tramite uno script shell tra l'altro) ad una certa ora, che può essere fissa (come le 8:00 di mattina) oppure specificata in ore e minuti da CLI?
Visto il loop continuo non mi meraviglierei se il portatile si fosse surriscaldato e, di conseguenza, spento e/o riavviato...
Fossi in te farei uso di un cron job (nel caso l'ora sia più fissa che variabile) e/o di at.
at è estremamente flessibile nel programmare l'esecuzione di comandi.
Per esempio, per programmare il lancio di suona.sh tra 20 minuti a partire da adesso puoi scrivere:

Codice: Seleziona tutto

echo "suona.sh" | at now + 20 minutes
oppure, diponendo già di uno script da eseguire:

Codice: Seleziona tutto

at -f suona.sh now + 20 minutes
Ovviamente puoi sempre specificare l'ora esatta che ti interessa.
Consulta il man di at per ulteriori informazioni.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: problemi riavvio immotivato portatile in stato di inatti

Messaggio da targzeta »

Ma dai NicoMetal, il tuo programma più che sveglia lo chiamerei "termosifone". Anzi scrivici anche un "app" in questo modo, che fa figo :). Pensa, "trasforma il tuo cellulare in un termosifone", oppure, "hai freddo nelle notti di inverno? Installati il mio app".

Prova ad eseguire 'top' prima e mentre è in esecuzione il tuo programma e vedrai che il tuo processore schizza al 100% di uso e ci rimane sempre. Potrebbe davvero essere questo la causa del riavvio del tuo notebook, specialmente se non ben ventilato (e non è raro visto che i notebook si riempiono presto di polvere). Comunque di sicuro gli abbrevia la vita. Evita di usarlo d'ora in poi!!!

at e cron sono stati creati e pensati allo scopo. Comunque dai anche uno sguardo al man di "sleep". Tramite un piccolo script (che è più semplice di quanto si possa immaginare) puoi calcolare i minuti, le ore o i giorni di attesa e passarli come argomento a sleep. L'esempio postato da 414N potrebbe anche essere scritto in questo modo:

Codice: Seleziona tutto

sleep 20m; souna.sh
Anche secondo me at (o cron) è più indicato per queste cose, però se non vuoi installarti un demone sul PC...
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

elendil
Linux 1.x
Linux 1.x
Messaggi: 103
Iscritto il: sab 9 ago 2008, 12:39
Nome Cognome: Valerio
Slackware: 14
Kernel: 3.2.29
Desktop: xfce
Distribuzione: SalixOS
Località: Carpineto Romano (RM)

Re: problemi riavvio immotivato portatile in stato di inatti

Messaggio da elendil »

spina ha scritto: Prova ad eseguire 'top' prima e mentre è in esecuzione il tuo programma e vedrai che il tuo processore schizza al 100% di uso e ci rimane sempre. Potrebbe davvero essere questo la causa del riavvio del tuo notebook, specialmente se non ben ventilato (e non è raro visto che i notebook si riempiono presto di polvere). Comunque di sicuro gli abbrevia la vita. Evita di usarlo d'ora in poi!!!
Questo è sicuramente il tuo problema, con le temperature africane di questo periodo è ancora più evidente :)
"In wars boy, fools kill other fools for foolish causes." (R. Jordan, The Wheel of Time book 1)

Avatar utente
NicoMetal
Linux 2.x
Linux 2.x
Messaggi: 380
Iscritto il: dom 2 mag 2010, 18:21
Nome Cognome: Nicola
Slackware: current64
Kernel: 4.3
Desktop: kde5 - FluxBox
Località: Verona

Re: problemi riavvio immotivato portatile in stato di inatti

Messaggio da NicoMetal »

Grazie mille per le risposte siete stati molto esaustivi :) Comunque per curiosità come potrei modificare il sorgente c per far si che la mia sveglia non sovraccarichi il processore? Senza il ciclo che continua a controllare l'ora come posso fare? Sapevo già di crontab però era uno sfizio personale farmelo in c.
se metto uno sleep di n secondi all'interno del ciclo ci potrebbe stare?

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: problemi riavvio immotivato portatile in stato di inatti

Messaggio da 414N »

Penso che il metodo più semplice sia simile a quello proposto da spina a livello shell: calcolare la differenza di tempo tra l'ora attuale e l'ora alla quale voler attivare la sveglia ed usare la system call sleep() per attendere l'istante in cui lanciare il suono. In questo modo il processo va a fare un pisolino senza impegnare il processore attivamente finché il timer non arriva a 0.
Va bene per esercizio, ma come soluzione al problema di lanciare uno script dopo tot tempo non è certamente il meglio ;)

Avatar utente
NicoMetal
Linux 2.x
Linux 2.x
Messaggi: 380
Iscritto il: dom 2 mag 2010, 18:21
Nome Cognome: Nicola
Slackware: current64
Kernel: 4.3
Desktop: kde5 - FluxBox
Località: Verona

Re: problemi riavvio immotivato portatile in stato di inatti

Messaggio da NicoMetal »

grazie a tutti per le risposte!

Rispondi