2 votes

Qu'est-ce qu'une session barrée (strikethrough), colorée en rouge, spécifie dans Termux ?

J'ai fait l'expérience de plusieurs sessions Termux non réactives sur Oneplus 5T par rien de plus intensif que d'ouvrir environ cinq pages web en lynx (chacun dans leur propre... encore une fois, session en tmux ; Ctrl + B , C sur le clavier).

J'ai attendu plusieurs jours et les sessions ne semblent pas se rétablir.

Les sessions suivantes sont-elles tombées en panne ou Termux les considère-t-il comme étant dans un état de gel ?

screenshot

1voto

Andrew T. Points 12017

Selon le code source, les sessions barrées en rouge sont des sessions dont l'exécution est terminée avec un code de sortie non nul (par exemple, une session tuée).


En TermuxSessionsListViewController La classe gère l'interface utilisateur pour la liste des sessions :

  • Si la session n'est pas en cours, le texte sera barré.
  • Si la session n'est pas en cours d'exécution et a un statut de sortie non nul, elle sera colorée en rouge.

    TerminalSession sessionAtRow = getItem(position).getTerminalSession();

    ...

    boolean sessionRunning = sessionAtRow.isRunning();

    if (sessionRunning) { sessionTitleView.setPaintFlags(sessionTitleView.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG); } else { sessionTitleView.setPaintFlags(sessionTitleView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); } int defaultColor = shouldEnableDarkTheme ? Color.WHITE : Color.BLACK; int color = sessionRunning || sessionAtRow.getExitStatus() == 0 ? defaultColor : Color.RED; sessionTitleView.setTextColor(color);

En TerminalSession gère la logique, y compris le moment où elle est considérée comme ayant terminé son exécution (PID = -1) avec son code de sortie.

/** The pid of the shell process. 0 if not started and -1 if finished running. */
int mShellPid;

/** The exit status of the shell process. Only valid if ${@link #mShellPid} is -1. */
int mShellExitStatus;

...

/** Cleanup resources when the process exits. */
void cleanupResources(int exitStatus) {
    synchronized (this) {
        mShellPid = -1;
        mShellExitStatus = exitStatus;
    }

    ...

}

...

public synchronized boolean isRunning() {
    return mShellPid != -1;
}

/** Only valid if not {@link #isRunning()}. */
public synchronized int getExitStatus() {
    return mShellExitStatus;
}

...

@SuppressLint("HandlerLeak")
class MainThreadHandler extends Handler {

    ...

    @Override
    public void handleMessage(Message msg) {

        ...

        if (msg.what == MSG_PROCESS_EXITED) {
            int exitCode = (Integer) msg.obj;
            cleanupResources(exitCode);

            String exitDescription = "\r\n[Process completed";
            if (exitCode > 0) {
                // Non-zero process exit.
                exitDescription += " (code " + exitCode + ")";
            } else if (exitCode < 0) {
                // Negated signal.
                exitDescription += " (signal " + (-exitCode) + ")";
            }
            exitDescription += " - press Enter]";

            byte[] bytesToWrite = exitDescription.getBytes(StandardCharsets.UTF_8);
            mEmulator.append(bytesToWrite, bytesToWrite.length);
            notifyScreenUpdate();

            mClient.onSessionFinished(TerminalSession.this);
        }
    }

}

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X