Schreiben Sie ein Programm, das sich nach Beendigung von selbst neu startet.
Es sollte nicht mehr als eine Instanz des Programms gleichzeitig ausgeführt werden. Nicht einmal für den geringsten Moment.
Sie können jede Instanz ignorieren, die vom Benutzer während Ihres Zyklus manuell gestartet wurde. Ihr Code sollte dies jedoch in Ihrem Neustartzyklus nicht tun.
Das Programm kann nach einer beliebigen Zeit gestartet werden, sofern sichergestellt ist, dass es erneut gestartet wird.
Der Zyklus kann nur gestoppt werden, indem der Prozess abgebrochen wird.
Ihre Lösung sollte keinen Neustart der Umgebung beinhalten (in der das Programm ausgeführt wird, einschließlich Betriebssystem, Computer, VM, Shell usw.). Nur Ihr Programm darf neu starten.
popularity-contest
mikrobisch
quelle
quelle
exec
Linux funktioniert?shutdown -r -t 0 -f
".Antworten:
Bash-Schrift, 3 Zeichen (Kürzeste, möglicherweise eleganteste, wenn auch zugegebenermaßen kontroverse)
Platziert einfach eine neue Instanz von sich selbst im Hintergrund (neuer Prozess) und wird dann beendet. Die neue Instanz verbleibt wahrscheinlich in der Ausführungswarteschlange des Schedulers, bis die vorherige Instanz ausgeführt wurde.
Warnung - Dies ist schwierig
kill
, da sich die PID ständig ändert. Das vorübergehende Umbenennen der Skriptdatei ist wahrscheinlich die einfachste Möglichkeit, den Zyklus zu unterbrechen.Ein Single-Core-System wird angenommen. Natürlich ist dies mit Linux auf moderner Bare-Metal-Hardware nicht realistisch, aber es ist leicht konfigurierbar, wenn es in einer VM ausgeführt wird. Wir könnten wahrscheinlich einen ähnlichen Trick mit erzielen
taskset
, aber das würde die Auswirkung der 3-Zeichen-Lösung verringern.Diese Antwort verbiegt die Regeln ein wenig, indem sie eine bestimmte Bedeutung von "Laufen" anwendet. Es wird Momente geben, in denen der neue Prozess
fork()
bearbeitet wurde und der alte Prozess noch aktiv ist - dh es kann möglich sein, mehr als eine PID zu beobachten. Der neue Prozess wird jedoch in die Ausführungswarteschlange des Linux-Schedulers gestellt, um auf CPU-Zyklen zu warten, während der vorhandene Prozess weiterhin ausgeführt wird. An diesem Punkt muss alles, was der bestehende Prozess tun muss, fürbash
sich seinexit()
. Dies nimmt eine endliche Zeit in Anspruch, obwohl ich ziemlich zuversichtlich bin, dass dies lange vor dem aktuellen Zeitscheiben- / Scheduler-Quantum geschehen wird. Unterstützende Beweise sind die Tatsache, dassbash
auf meiner VM in 2 ms gestartet und heruntergefahren wird:Weitere Belege dafür, dass der neue Prozess erst dann ausgeführt wird, wenn der vorherige Prozess abgeschlossen ist, sind in der
strace
Ausgabe zu sehen :In der Ausgabe sehen wir, dass der ursprüngliche Prozess die PID 6929 hat. Wir können den
fork()
Aufruf (tatsächlichclone()
) sehen, der eine neue PID von 6930 zurückgibt. Zu diesem Zeitpunkt gibt es 2 PIDs, aber derzeit läuft nur 6929:Volle
strace
Ausgabe hier.Wir können sehen, dass 6930 keine Systemaufrufe ausgibt, bis 6929 vollständig abgeschlossen ist. Es ist anzunehmen, dass 6930 erst nach Abschluss von 6929 ausgeführt wird. Das
perf
Dienstprogramm wäre der ultimative Weg, um dies zu beweisen.quelle
top
ist hier nicht das richtige Werkzeug. Ich sehe jedoch, dasstime bash -c :
dies auf meiner Ubuntu-VM nur 2 ms dauert, daher halte ich es nicht für unangemessen, zu erwartenbash
, dass das Herunterfahren abgeschlossen ist, bevor die Zeitplanung abgeschlossen ist.Lösung 1
PHP, 32 Zeichen
Es sendet den Header und stoppt dann. Nach 3 Sekunden wird die Seite neu geladen.
Datei a.php
Dies kann durch Beenden der Ausführung der Seite vor dem Senden der Header oder einfach durch Beenden des Browsers gestoppt werden.
Lösung 2
PHP, 2 Seiten
Betrachten wir die beiden Dateien als zwei verschiedene Programme. Die beiden Dateien befinden sich im selben Ordner.
Datei a.php
Datei b.php
Wenn Sie eine der Seiten beenden, bevor die Header gesendet werden, wird das Programm beendet (auch das Beenden des Browsers funktioniert).
Hier ist das gleiche Programm in
ASP.NET
Datei a.aspx
Datei b.aspx
quelle
Sch
Dies funktioniert auf jedem Posix-kompatiblen System.
Um es zu töten, löschen Sie die Datei oder verwenden Sie
atrm
.quelle
Bash
exec
Ersetzt die Shell, ohne einen neuen Prozess zu erstellen. Dies stellt sicher, dass es keine zweite Instanz geben kann.quelle
~/.bash_profile
!$0
is-bash
when.bash_profile
is sourced , was nur zu einem Syntaxfehler führen würde.exec ${0##-}
in~/.bash_profile
works :-)Windows Task Scheduler (Native)
C ++. Ein Albtraum der COM-Programmierung. Erfüllt alle Herausforderungsanforderungen.
Kompilieren Sie mit MSVC (oder MinGW GCC, wenn Sie alle Abhängigkeiten haben).
Das Programm startet und registriert eine einmalige Aufgabe beim Windows-Taskplaner, um sich 5 Sekunden später selbst zu starten (Systemsteuerung -> Verwaltung -> Taskplaner, um anzuzeigen, die Aufgabe heißt "Neustarter"). Das Programm wird 5 Sekunden lang angehalten, damit Sie es beenden können, bevor die Aufgabe erstellt wird.
Herausforderungsanforderungen:
Startet sich selbst wieder, wenn Sie fertig sind. Ja. Die Aufgabe ist unmittelbar vor dem Beenden des Programms geplant.
Es kann nicht mehr als eine Instanz des Programms gleichzeitig ausgeführt werden. Ja. Das Programm wird vollständig beendet und 5 Sekunden lang nicht ausgeführt. Es wird vom Scheduler gestartet.
Sie können jede Instanz ignorieren, die vom Benutzer während Ihres Zyklus manuell gestartet wurde. Ja, als Nebeneffekt der Verwendung eines konstanten Aufgabennamens.
Solange garantiert ist, dass es wieder losgeht. Ja, vorausgesetzt, der Taskplaner wird ausgeführt (in einer Standard-Windows-Konfiguration).
Der Zyklus kann nur gestoppt werden, indem der Prozess abgebrochen wird. Ja, der Vorgang kann während des 5-Sekunden-Fensters abgebrochen werden, während er ausgeführt wird. Das Programm löscht die Aufgabe vor der Verzögerung von 5 Sekunden. Wenn Sie sie zu diesem Zeitpunkt beenden, verbleibt keine Streuaufgabe im Scheduler.
Ihre Lösung sollte keinen Neustart der Umgebung beinhalten. Ja.
Übrigens, wenn sich jemals jemand gefragt hat, warum Windows-Anwendungen (vor dem Aufkommen von .NET und C #) so instabil waren, ist dies einer der Gründe. Der Umfang der erforderlichen Fehlerbehandlung (sofern ich sie berücksichtigt habe), des Ressourcenmanagements und der Ausführlichkeit führt zu sehr fehleranfälligen Situationen, wenn ein Programmierer auch nur ein bisschen faul ist (der obige Code ist extrem faul).
Eine viel einfachere und kürzere Alternative ist das Aufrufen von schtasks.exe. Ich habe damit auch eine Version in einem .BAT-Skript eingereicht .
quelle
BBC BASIC - eine Hommage an Snow Patrol
Emulator bei bbcbasic.co.uk
Das ist ein bisschen anders. Es druckt einen Vers des Songs "Run" und spielt ein Arpeggio der Akkorde, so dass Sie mitsingen können. Es war inspiriert von der Tatsache, dass der auszuführende Befehl (und damit die letzte Zeile des Programms) natürlich RUN ist.
Alle Variablen werden beim Start des Programms gelöscht, sodass anhand der Bildschirmfarbe der vorherigen Iteration entschieden wird, welcher Vers als nächstes gedruckt werden soll.
OUTPUT (Montage von 4 verschiedenen Screenshots)
quelle
HTML / JavaScript:
Der Code löst die Zerstörung der Seite aus, auf der er ausgeführt wird, und die Neuerstellung einer weiteren Instanz von sich selbst, wenn der Browser die Seite erneut lädt.
AFAIK, der einzige Ausweg besteht darin, den Tab abzubrechen, auf dem die Seite ausgeführt wird.
BEARBEITEN: laut populärer Anfrage ein gültiger HTML5 Code:
quelle
C
Dieses Programm wirkt wie viel Malware. Kurz bevor es geschlossen wird, erstellt es ein Shell-Skript im Verzeichnis / tmp. Sie werden aufgefordert, das Shell-Skript zu starten, mit dem das ursprüngliche Programm geschlossen und die ursprüngliche PID abgebrochen werden kann. Nach kurzer Zeit (2 Sekunden) startet das Shell-Skript einen neuen Prozess mit dem Programm. Der Kürze halber ist der Programmspeicherort mit '/ tmp / neverend /' fest verdrahtet.
Es wird immer nur ein "nie endender" Prozess gleichzeitig ausgeführt. Jeder neue Prozess erhält eine neue PID. Der einfachste Weg, dies zu beenden, ist das Löschen der ausführbaren Datei. Wenn Sie es bösartiger machen möchten, können Sie sowohl die ausführbare Datei als auch das Skript kopieren, um sicherzustellen, dass sich jederzeit mehrere Kopien auf der Festplatte des Programms befinden.
quelle
system()
wenn die Regeln keine Fork + Exec/bin/sh
als zusätzliches Programm zählen.Perl
Das Skript gibt einen Systembefehl aus, um sich selbst zu beenden und das Ergebnis in eine andere Instanz von sich selbst zu leiten. Der Perl-Interpreter wird aus plattformübergreifenden Gründen zum Töten verwendet.
Stoppen Sie den Wahnsinn, indem Sie das Skript löschen.
quelle
Atari 8-Bit Basic
Tokens für:
Intern löscht es die internen Strukturen, löscht im Wesentlichen das Programm, bevor es erneut aus der Auflistung ausgeführt wird.
Dies unterscheidet sich grundlegend von:
Welches symbolisiert zu:
Dies ist eine grundlegende Endlosschleife. Wenn Sie sie ausführen, sehen Sie den Unterschied in der Geschwindigkeit (zuerst ist langsamer).
quelle
LIST
würdest du es nicht laufen sehen. Ich habe gewählt,LIST
weil es die kürzeste Eingabe hatL.
. Ich mag die Idee, das in einen Tastaturpuffer zu legen, es ist sicherlich kurz genug!Return
? Wie groß ist der Tastaturpuffer? Beim VIC-20 und C64 sind es zehn Bytes. Ein Programm, das genug Stupser ausführt, um den Tastaturpuffer zu laden, würde wahrscheinlich nicht in den Tastaturpuffer passen, aber ich habe Programme geschrieben, die sich ändern, indem sie Änderungen auf dem Bildschirm ausgeben, gefolgt vonRUN
ein paarReturn
Tastenanschlägen. Solche Dinge waren besonders nützlich auf dem 64, da es nicht den [IIRC]IN
-Befehl gab, den der Atari zum Zusammenführen von Zeilen zu einem Programm hat.Auf einem IBM Mainframe unter z / OS führen Sie ein Dienstprogramm aus, das eine Datenmenge (Datei) in eine andere Datenmenge (Datei) kopiert. Die Eingabe ist die Quelle der JCL (Job Control Language), die Sie zur Ausführung übergeben haben. Der Ausgang ist der interne Leser (INTRDR). Sie müssen auch sicherstellen, dass Ihr System die Ausführung mehrerer identischer Jobnamen nicht zulässt. Es ist gut, eine Jobklasse zu verwenden, die nur einen Initiator hat (Ort, an dem ein Job im Batch ausgeführt werden kann).
Es sind keine PIDs beteiligt (in z / OS), daher schlägt der Abfragesatz fehl.
Sie stoppen den Prozess durch Ablassen und / oder Spülen. Wenn etwas schief gelaufen ist, durch Ablassen und / oder Spülen, Fluchen, Treten, einen Warmstart und schließlich durch einen Kaltstart versuchen oder den großen roten Knopf drücken (und auf den Programmierer schießen).
Ich habe auf dem Weg vielleicht übertrieben, aber versuche das nicht bei der Arbeit ...
Beispiel mit SORT. Details auf der Jobkarte sind sehr standortabhängig. Die Site-Richtlinien verbieten oder verhindern möglicherweise die Verwendung von INTRDR. Für die Verwendung von INTRDR ist möglicherweise eine bestimmte Klasse erforderlich. Wenn Ihre Website-Richtlinie die Verwendung verbietet, verwenden Sie sie nur, wenn Sie Ihre Habseligkeiten für einen Spaziergang in einem Pappkarton mitnehmen möchten.
Obwohl es gute Verwendungen für das INTRDR gibt, verwenden Sie es nicht für diesen Zweck . Sie werden nicht einmal eine Chance haben, Ihre Box zu bekommen.
Andere Dienstprogramme sind verfügbar. Ein schnelles Programm wäre ebenfalls einfach zu erstellen. Lesen Sie einfach eine Datei und schreiben Sie eine Datei.
Wenn Sie möchten, dass ein Beispiel dafür nicht funktioniert, versuchen Sie Folgendes : http://ibmmainframes.com/viewtopic.php?p=282414#282414
Die herkömmliche Methode zum Kopieren eines Datasets besteht darin, das IBM-Dienstprogramm IEBGENER zu verwenden, wie ugoren in ihrem Kommentar anspielt.
Heutzutage wird IEBGENER an vielen Standorten auf ICEGENER "ausgerichtet" sein. ICEGENER wird, wenn möglich, IBMs DFSORT (oder seinen Rivalen SyncSort) verwenden, um eine Kopie zu erstellen, da die SORT-Produkte für E / A wesentlich besser optimiert sind als IEBGENER.
Ich schneide nur den Mittelsmann mit SORT aus.
Wenn Sie an einem IBM Mainframe-Standort arbeiten, kennen Sie das Format der JOB-Karte, die Sie verwenden sollten. Die minimale JOB-Karte ist, wie ich gezeigt habe, ohne Kommentar. Der Kommentar ist wichtig, da Sie möglicherweise beispielsweise Buchhaltungsinformationen angeben. Der Jobname wird wahrscheinlich ein standortspezifisches Format haben.
Einige Websites verbieten oder verhindern die Verwendung von INTRDR. Sei vorsichtig.
Auf einigen Sites können mehrere Jobs mit demselben Namen gleichzeitig ausgeführt werden. Sei vorsichtig.
Obwohl Sie als Systemprogrammierer keine solche Klasse einrichten können, sollten Sie nach einer Klasse suchen, die nur einen Initiator zulässt. Damit ist der Prozess ziemlich sicher - aber seien Sie sich absolut sicher, dass die Klasse wie beschrieben funktioniert. Prüfung. Nicht bei diesem Job.
Wenn Sie ein Programmierer des Systems sind, wissen Sie, dass Sie nichts außerhalb Ihres Zuständigkeitsbereichs tun dürfen. 'nuff sagte.
Bei einem Job mit demselben Namen, der zur selben Zeit zulässig ist, und einem einzelnen Initiator ist dies ein konstanter Strom von Jobstart / -ende, nächster Jobstart / -ende, bis Sie die Spool (eine andere schlechte Aufgabe) mit der Ausgabe von füllen Tausende von Jobs (oder keine Jobnummern mehr). Überwachen Sie eine JES-Konsole auf Warnmeldungen.
Tu das im Grunde nicht. Wenn Sie es tun, tun Sie es nicht auf einer Produktionsmaschine.
Mit ein wenig Nacharbeit werde ich eine andere Antwort für die Vorgehensweise unter einem anderen IBM Mainframe-Betriebssystem betrachten: z / VSE ... z / VSE verwendet JCL. z / OS verwendet JCL. Sie sind anders :-)
quelle
IEBGENER
damals einfach kopiert.Python (72 Bytes)
Könnte kleiner werden, denke ich. Erstens, indem Sie den Namen der Datei fest codieren (anstatt ihn zu verwenden
__file__
). Aber hier können Sie diesen Code in eine Datei einfügen und ausführen, egal wie er heißt :)quelle
&&
zu&
.Windows Task Scheduler (.BAT)
Windows-Stapelskript. Erfüllt alle Herausforderungsanforderungen.
Soweit ich sehen kann, ist dies die einzige Windows-Lösung, die alle Anforderungen erfüllt und keine nicht standardmäßigen Abhängigkeiten aufweist (meine andere Lösung ist ähnlich, erfordert jedoch eine Kompilierung).
Das Programm verhält sich ähnlich wie meine C ++ / COM-Antwort .
Das Programm startet und registriert eine einmalige Aufgabe beim Windows-Taskplaner, um sich bis zu 60 Sekunden später selbst zu starten (Systemsteuerung -> Verwaltung -> Taskplaner, um anzuzeigen, die Aufgabe heißt "Neustarter"). Das Programm wird 5 Sekunden lang angehalten, damit Sie es beenden können, bevor die Aufgabe erstellt wird.
Verwendet die Befehlszeilenschnittstelle des Taskplaners
schtasks.exe
. Arithmetisch im Skript werden Zeitversätze berechnet, wobei die Zeit gültig und im HH: MM-Format bleibt.Herausforderungsanforderungen:
Startet sich selbst wieder, wenn Sie fertig sind. Ja. Die Aufgabe ist unmittelbar vor dem Beenden des Programms geplant.
Es kann nicht mehr als eine Instanz des Programms gleichzeitig ausgeführt werden. Ja. Das Programm wird vollständig beendet und ~ 60 Sekunden lang nicht ausgeführt. Es wird vom Scheduler gestartet.
Sie können jede Instanz ignorieren, die vom Benutzer während Ihres Zyklus manuell gestartet wurde. Ja, als Nebeneffekt der Verwendung eines konstanten Aufgabennamens.
Solange garantiert ist, dass es wieder losgeht. Ja, vorausgesetzt, der Taskplaner wird ausgeführt und schtasks.exe ist vorhanden (beides gilt in Standard-Windows-Konfigurationen).
Der Zyklus kann nur gestoppt werden, indem der Prozess abgebrochen wird. Ja, der Vorgang kann während des 5-Sekunden-Fensters abgebrochen werden, während er ausgeführt wird. Das Programm löscht die Aufgabe vor der Verzögerung von 5 Sekunden. Wenn Sie sie zu diesem Zeitpunkt beenden, verbleibt keine Streuaufgabe im Scheduler.
Ihre Lösung sollte keinen Neustart der Umgebung beinhalten. Ja.
Hinweis: Aufgrund der eingeschränkten Befehlszeilenschnittstelle muss die Neustartzeit in Minuten angegeben werden, und der Task wird auf Laptops ohne eingesteckten Netzadapter nicht neu gestartet (Entschuldigung).
quelle
Unix-Shell
Ich habe noch nicht viele Lösungen gesehen, die auf einem nicht verwandten Programm basieren, um es neu zu starten. Aber genau dafür wurde das
at(1)
Dienstprogramm entwickelt:Es ist schwierig, das laufende Programm tatsächlich zu erfassen, da es nur einmal pro Minute ausgeführt wird und so schnell beendet wird. Zum Glück
atq(1)
zeigt Ihnen das Dienstprogramm, dass es noch läuft:Und
atrm(1)
ermöglicht es Ihnen, den Zyklus zu brechen:Sie können
1 minute
mit1 hour
, oder ersetzen1 week
. Oder geben Sie es1461 days
, um ein Programm zu haben, das alle 4 Jahre einmal ausgeführt wird.quelle
Power Shell
Ich missbrauche (und verstoße möglicherweise) meine eigene Regel.
Der Neustart dauert unendlich lange.
Es kann getötet werden, indem der Host-Prozess beendet wird.
Einfach abwarten und sehen;)
quelle
while true; do sleep 1; done
quillt es, nicht wahr?Bash
Speichern Sie diese Datei als repeat.sh im Verzeichnis / und erteilen Sie ihr die Ausführungsberechtigung. Es kann durch Löschen der Datei getötet werden
Dies funktioniert, indem Sie einen Eintrag in die crontab eingeben, um ihn 1 Minute später auszuführen.
quelle
Visual Base 6 :)
Erstellen Sie zum Ausführen ein neues Projekt, fügen Sie ein Modul mit diesem Code hinzu, setzen Sie das Startobjekt auf "Sub Main", kompilieren Sie die ausführbare Datei und führen Sie sie aus.
Mehr lesbare Version:
quelle
HTML / JAVASCRIPT
HTML-DATEI a.html
quelle
Bash
Länger als es sein muss, aber ich bin müde und es ist mir egal :)
Sie sagten, dass es sich selbst neu starten muss, wenn es fertig ist. Sie haben nicht ausdrücklich gesagt, dass es dies wiederholt oder auf unbestimmte Zeit tun muss. Sie sagten auch, dass niemals zwei Instanzen gleichzeitig ausgeführt werden sollten ... dies wird niemals der Fall sein. ;)
Es gibt eine Vielzahl von Möglichkeiten, dies zu tun. Mein persönlicher Favorit wäre, so etwas wie ein Paket an einen entfernten Ort zu senden und dann (über eine beliebige Anzahl von Methoden) die Antwort den Prozess auslösen zu lassen.
quelle
sleep
startet der Prozess neu, wenn er beendet istAndroid: Ein Alarm startet die Aktivität nach 1 Sekunde neu
quelle
C + MPI-Umgebung
mpifork.c:
Sie müssen OpenMPI oder eine andere MPI-Implementierung installiert haben.
Kompilieren mitNun, da ich darüber nachdenke, gibt es keinen Grund, warum Sie mpicc - gcc verwenden müssen oder welcher Compiler auch immer funktioniert. Sie müssen nur mpirun haben.Um es auszuführen, sollten Sie wahrscheinlich den vollständigen Pfadnamen und eine Liste der Hosts angeben. Zum Beispiel habe ich einige Einträge in / etc / hosts hinzugefügt, die alle auf localhost zeigten, und habe es folgendermaßen ausgeführt:
Die ausführbare Datei muss sich auf jedem Computer, auf dem Sie diese ausführen möchten, im selben Verzeichnis befinden.
Dabei wird im Wesentlichen eine Liste von Hosts verwendet, die in der Befehlszeile bereitgestellt werden, einer der Hosts ausgewählt und die ausführbare Datei auf dem Zielhost mit denselben Argumenten gestartet. Wenn alles perfekt läuft, ruft sich mpirun immer wieder auf verschiedenen Rechnern auf (oder auf demselben Rechner, wenn Sie nur 'localhost' angeben. Die ausführbare Datei selbst (mpifork) wird beendet - nach dem Aufruf
execvp
wird sie nicht mehr auf dem ersten Rechner ausgeführt.Wenn Sie böse sein möchten, können Sie diesen Start stattdessen auf jedem Computer ausführen, indem Sie die vollständige Liste der Hosts in die Befehlszeile einfügen
args
. Das würde auf jedem Rechner immer wieder eine Kopie von sich selbst erzeugen - eine Cluster-Gabelbombe.In dieser Form bin ich mir jedoch ziemlich sicher, dass dies den Regeln entspricht.
quelle
JavaScript
Ohne "ins Netzwerk gehen", wenn es nicht nötig ist :-) Mit der Event-Loop-Planung von JavaScript können wir sehr einfach Programme schreiben, die die gegebenen Anforderungen erfüllen:
Dies "startet" die
program
Funktion mit einer Geschwindigkeit von 10-mal pro Sekunde neu. JavaScript garantiert, dass nur eine Aufgabe gleichzeitig ausgeführt wird, und startet die Umgebung nicht neu, wie unter "Seite neu laden" beschrieben.quelle
x86-Assembly
Nicht ganz sicher, ob dies Ihren Kriterien entspricht, da es keinen neuen Prozess erzeugt, aber hier ist es trotzdem.
Das Programm zeigt ein Meldungsfeld an, weist Speicher zu, kopiert seinen eigenen Codeabschnitt in den zugewiesenen Speicher und springt dann zu dieser Stelle, wobei der Zyklus von vorne beginnt. Es sollte so lange laufen, bis malloc ausfällt.
Mit fasm zusammengestellt.
quelle
@
sobald du es schaffst, da ich wahrscheinlich nicht aufpassen werde).Linux upstart init
Angesichts der strengsten Lektüre der Frage halte ich dies für unmöglich. Im Wesentlichen wird darum gebeten, dass ein Programm spontan gestartet wird, ohne dass andere Programme ausgeführt werden.
Es gibt einige
at
undchron
-basierte Antworten, jedoch mit der strengsten Lesart,atd
undanacron
es handelt sich um Ergänzungsprogramme, die ständig ausgeführt werden, so dass sie möglicherweise disqualifiziert werden.Ein ähnlicher Ansatz, aber etwas niedriger, ist die Verwendung von Linux
init
. Fügen Sie als Root diese .conf-Datei hinzu zu/etc/init/
:Dann müssen
init
Sie die .conf-Dateien erneut lesen:Dadurch wird ein
sleep
Prozess gestartet , der 10 Sekunden lang andauert und dann beendet wird.init
wird dann wieder erscheinen,sleep
sobald es feststellt, dass das vorherige verschwunden ist.Natürlich wird dies immer noch
init
als Zusatzprogramm verwendet. Man könnte argumentieren, dass diesinit
eine logische Erweiterung des Kernels ist und in jedem Linux immer verfügbar sein wird.Wenn dies nicht akzeptabel ist, würde ich als nächstes auf einer niedrigeren Ebene ein Kernelmodul erstellen, das einen Userspace-Prozess wieder aufbaut (nicht sicher, wie einfach das ist). Hier kann argumentiert werden, dass der Kernel kein Prozess und daher kein Programm (Zusatz) ist. Andererseits ist der Kernel aus Sicht der CPU ein eigenständiges Programm.
quelle
TI-BASIC: 5 Zeichen
nennen
prgmA
quelle
:
ist nur das Symbol für den Zeilenanfang, wenn Sie in TI-basic programmieren. Es ist nichts, was du eingibst, es ist nur dort im Editor.A
, den Wert zu erhöhen und ihn als Basisfall zu verwenden, wird er irgendwann ausgeblendet.