এমন একটি প্রোগ্রাম যা শেষ হয় তবে কখনও শেষ হয় না [বন্ধ]


35

একটি প্রোগ্রাম লিখুন যা শেষ হওয়ার পরে আবার শুরু হয়।

একই সময়ে প্রোগ্রামটি চলার একাধিক উদাহরণ থাকতে হবে না। এমনকি সামান্য কিছু মুহুর্তের জন্যও নয়।

আপনার চক্র চলাকালীন ব্যবহারকারী দ্বারা ম্যানুয়ালি শুরু হওয়া কোনও উদাহরণ আপনি এড়িয়ে যেতে পারেন। তবে আপনার কোডটি আপনার পুনঃসূচনা চক্রের মধ্যে এটি করা উচিত নয়।

প্রোগ্রামটি যে কোনও সময় পরে শুরু হতে পারে, যতক্ষণ না এটির পুনরায় শুরু হওয়ার গ্যারান্টি রয়েছে।

চক্রটি বন্ধ করার একমাত্র উপায় হ'ল প্রক্রিয়াটি হ্রাস করা।

আপনার সমাধানটিতে পরিবেশ পুনরায় চালু করা জড়িত থাকা উচিত নয় (যেখানে প্রোগ্রাম চলছে, এতে ওএস, মেশিন, ভিএম, শেল ইত্যাদি রয়েছে)। শুধুমাত্র আপনার প্রোগ্রামটিকে পুনরায় চালু করার অনুমতি দেওয়া হয়েছে।


11
এই কি execলিনাক্স মধ্যে কি না?
mniip

11
আমি এখনই এটি লিখতে কিছুটা অলস, তবে আমার জমাটি হবে (উইন্ডোগুলির জন্য): "রেজিস্ট্রি সম্পাদনা করুন যাতে আমার প্রোগ্রামটি শুরুতে বুট হয় Run রান shutdown -r -t 0 -f"।
ক্রંચার

3
প্রক্রিয়াটি হত্যা করা আপনার চক্রটিকে হত্যা করবে না।
মাইক্রোবিয়ান

19
আমি কেবল বুঝতে পেরেছি: যদি আমি কোনও ভাইরাস লিখতে চাই এবং কীভাবে না জানতাম তবে আমি 1) স্ট্যাকওভারফ্লোতে যেতে পারি, কীভাবে জিজ্ঞাসা করুন। সবার থেকে ঘৃণা পান এবং সম্ভবত প্রশ্নটি বন্ধ হয়ে যাবে। অথবা 2) কোড গল্ফ এ যান, অন্যরা কীভাবে এটি করেন তা জিজ্ঞাসা করুন। নির্বাচন করতে কয়েকটি মুখ্য সৃজনশীল উত্তর পান এবং প্রশ্নটি এত জনপ্রিয় যে এটি নেটওয়ার্ক-প্রশস্ত "হট" তালিকায় আসে। মুয়া হা হা হা হা।
রমটসচো

5
আপনি কি জানেন যে এটি একটি দুর্দান্ত সাধারণ কৌশল। ওকে বলছি, আমার পরবর্তী চ্যালেঞ্জের জন্য, আসুন দেখা যাক যে আমার ডেস্কে বসে প্রোটোটাইপ ডিভাইসের সাথে সংযুক্ত নথির সমস্ত প্রয়োজনীয়তা পূরণ করে সবচেয়ে ছোট ফার্মওয়্যারটি লিখতে পারেন। এটি মশালার জন্য, এটি অবশ্যই সোমবার সকাল 8 টা থেকে শেষ করা উচিত। যান!
জেসন সি

উত্তর:


50

বাশ লিপি, 3 টি অক্ষর (স্বল্পতম, সম্ভবত সবচেয়ে মার্জিত, যদিও স্বীকৃতভাবে বিতর্কিত)

$0&

কেবল ব্যাকগ্রাউন্ডে (নতুন প্রক্রিয়া) নিজের একটি নতুন উদাহরণ রাখুন, তারপরে প্রস্থান করুন। পূর্ববর্তী উদাহরণটি সম্পন্ন না হওয়া পর্যন্ত নতুন উদাহরণটি তফসিলকারী রান-কাতারে থাকবে।

সতর্কতা - killপিআইডি ক্রমাগত পরিবর্তিত হওয়ায় এটি কঠিন । অস্থায়ীভাবে স্ক্রিপ্ট ফাইলটির নাম পরিবর্তন করা সম্ভবত চক্রটি ভাঙ্গার সহজতম উপায়।

একটি একক-কোর সিস্টেম ধরে নেওয়া হয়। অবশ্যই এটি আধুনিক বেয়ার-মেটাল হার্ডওয়্যারে লিনাক্সের সাথে বাস্তবসম্মত নয়, তবে ভিএম-তে চালানোর সময় এটি সহজেই কনফিগারযোগ্য। আমরা সম্ভবত এটি ব্যবহার করে অনুরূপ কৌশল অর্জন করতে পারি taskset, তবে এটি 3-চর সমাধানের প্রভাবকে হ্রাস করবে।

এই উত্তরটি নিয়মগুলিকে কিছুটা বাঁকায় যাতে এটি "চলমান" এর নির্দিষ্ট অর্থ প্রয়োগ করে। এমন কিছু মুহুর্ত থাকবে যখন নতুন প্রক্রিয়াটি সম্পাদনা করা হবে fork()এবং পুরানো প্রক্রিয়াটি এখনও জীবিত থাকবে - অর্থাত্ একাধিক পিআইডি পর্যবেক্ষণ করা সম্ভব হতে পারে। তবে নতুন প্রক্রিয়াটি সিপিইউ চক্রের জন্য অপেক্ষা করার জন্য লিনাক্সের শিডিয়ুলার রান-কাতারে স্থাপন করা হবে এবং বিদ্যমান প্রক্রিয়াটি চালিয়ে যাওয়া চালিয়ে যাবে। এই মুহুর্তে বিদ্যমান প্রক্রিয়া দ্বারা যা করা দরকার তা কেবল bashনিজেরাই exit()। এটি একটি সীমাবদ্ধ পরিমাণ সময় নেয়, যদিও আমি যথেষ্ট বিশ্বাস করি যে বর্তমান টাইমলাইস / সময়সূচী কোয়ান্টামটি সম্পন্ন করার আগে এটি সম্পন্ন হবে। সমর্থনকারী প্রমাণ হ'ল সত্যটি যা bashআমার ভিএম এর 2 মিমি থেকে শুরু হয় এবং বন্ধ হয়:

$ সময় বাশ-সি:

বাস্তব 0m0.002 সে
ব্যবহারকারী 0m0.000s
sys 0m0.000s
$ 

পূর্ববর্তী প্রক্রিয়াটি শেষ না হওয়া পর্যন্ত নতুন প্রক্রিয়াটি আসলে চলবে না এমন আরও প্রমাণের প্রমাণ straceআউটপুটে দেখা যায় :

strace -f -tt -o forever.strace bash -c ./forever.sh 

আউটপুট, আমরা দেখতে মূল প্রক্রিয়া PID, 6929. আমরা দেখতে পারি হয়েছে fork()কল (আসলে clone()), যা এই মুহুর্তে 6930. একটি নতুন PID, ফেরৎ সেখানে 2 PIDs হয়, কিন্তু শুধুমাত্র 6929 বর্তমানে চলমান হয়:

6929 12: 11: 01.031398 ক্লোন (চাইল্ড_স্ট্যাক = 0, ফ্ল্যাগস = ক্লোন_চিল্ড_সকলিড | ক্লোন_চিল্ড_এসটিটিড | সিইচএইচএলডি, চাইল্ড_টিডিপিটার = 0x7f2f83ac49d0) = 6930
6929 12: 11: 01.031484 rt_sigprocmask (SIG_SETMASK, [], NULL, 8) = 0
6929 12: 11: 01.031531 rt_sigprocmask (SIG_BLOCK, [CHLD], [], 8) = 0
6929 12: 11: 01.031577 আরটি_সিগপ্রোকমাস্ক (সাইন_ব্লক, [সিএইচএলডি], [সিএইচডিডি], 8) = 0
6929 12: 11: 01.031608 rt_sigprocmask (SIG_SETMASK, [CHLD], NULL, 8) = 0
6929 12: 11: 01.031636 আরটি_সিগপ্রোকমাস্ক (সাইন_ব্লক, [সিএইচএলডি], [সিএইচডিডি], 8) = 0
6929 12: 11: 01.031665 rt_sigprocmask (SIG_SETMASK, [CHLD], NULL, 8) = 0
6929 12: 11: 01.031692 আরটি_সিগপ্রোকমাস্ক (সাইন_ব্লক, [সিএইচএলডি], [সিএইচডিডি], 8) = 0
6929 12: 11: 01.031726 rt_sigprocmask (SIG_SETMASK, [CHLD], NULL, 8) = 0
6929 12: 11: 01.031757 rt_sigprocmask (SIG_SETMASK, [], NULL, 8) = 0
6929 12: 11: 01.031803 আরটি_সিগপ্রোকমাস্ক (সাইন_ব্লক, নুল, [], 8) = 0
6929 12: 11: 01.031841 পড়ুন (255, "", 4) = 0
6929 12: 11: 01.031907 প্রস্থান_গোষ্ঠী (0) =?
6930 12: 11: 01.032016 বন্ধ (255) = 0
6930 12: 11: 01.032052 rt_sigprocmask (SIG_SETMASK, [], NULL, 8) = 0

straceএখানে সম্পূর্ণ আউটপুট।

আমরা দেখতে পাচ্ছি যে 6929 সম্পূর্ণ না হওয়া পর্যন্ত 6930 কোনও সিস্টেম কল দেয় না। এটি ধরে নেওয়া যুক্তিযুক্ত যে এর অর্থ 6930 6929 না হওয়া পর্যন্ত 6930 মোটেও চলবে না। perfউপযোগ এই প্রমাণ করার চূড়ান্ত উপায় হবে।


21
"পুনরায় আরম্ভ ..., তারপরে ছেড়ে দিন", তাহলে একই সাথে একাধিক উদাহরণ চলছে?
মাইক্রোবিয়ান

4
"... একক কোর" - হ্যাঁ, আমিও তাই অনুমান করব। একটি বহু-কোর, আপনি সম্ভবত অনেক দেখতে সক্ষম হতে পারে।
blabla999

3
এটি যদি কোড-গল্ফ ট্যাগ করা থাকে, তবে এটি অবশ্যই জিতবে! +1
জন ওডম

3
@ ডিজিটালট্রামা আপনি বাশকে নিজেকে বন্ধ করতে কতক্ষণ সময় লাগে সে সম্পর্কে আপনি বিশাল অনুমান করছেন। শীর্ষ আপনাকে কিছুই বলে না - এটি প্রতি কয়েক (দশক) সেকেন্ডে একবার আপডেট হয় তবে আপনি প্রতি সেকেন্ডে অনেকগুলি প্রক্রিয়া তৈরি করছেন।
ডেভিড রিচার্বি

2
@ ডেভিডরিচার্বি - আপনি একেবারে সঠিক - topএখানে ব্যবহার করার সঠিক সরঞ্জাম নয়। তবে আমি দেখতে পাচ্ছি যে time bash -c :আমার উবুন্টু ভিএম-তে মাত্র 2 মিমি লাগে, সুতরাং আমি শিডিউলিংয়ের bashপরিমাণ নির্ধারণের আগেই তার শাটডাউনটি সম্পন্ন করার আশা করা অযৌক্তিক বলে মনে করি না ।
ডিজিটাল ট্রমা

26

সমাধান 1

পিএইচপি, 32 টি অক্ষর

এটি হেডারটি প্রেরণ করে এবং তারপরে এটি বন্ধ হয়ে যায়। 3 সেকেন্ড পরে পৃষ্ঠাটি পুনরায় লোড হয়ে যায়।

ফাইল a.php

header("Refresh: 3; url=a.php");

শিরোনামগুলি প্রেরণের আগে পৃষ্ঠাটির সম্পাদনা বন্ধ করে বা ব্রাউজারকে হত্যা করে এটি বন্ধ করা যেতে পারে।


সমাধান 2

পিএইচপি, 2 পৃষ্ঠা

আসুন দুটি ফাইল দুটি ভিন্ন প্রোগ্রাম বিবেচনা করা যাক। দুটি ফাইল একই ফোল্ডারে রয়েছে।

ফাইল a.php

header("Location:b.php");

ফাইল বি.এফ.পি.

header("Location:a.php");

শিরোনামগুলি প্রেরণের আগে একটি পৃষ্ঠার সমাপ্তি প্রোগ্রামটি বন্ধ করে দেয় (ব্রাউজারটি হত্যার ফলেও কাজ করে)।

এখানে একই প্রোগ্রাম

ASP.NET

ফাইল a.aspx

Response.Redirect("b.aspx")

ফাইল b.aspx

Response.Redirect("a.aspx")

1
এটি একটি দুর্দান্ত সমাধান। আমি আশা করি এর চেয়ে আলাদা উত্তর নিয়ে অন্যেরাও আসবেন। সে কারণেই আমি এটি জনপ্রিয়তার প্রতিযোগিতা হিসাবে রেখেছি।
মাইক্রোবিয়ান

আপনার 3 সেকেন্ডের পুনরায় লোডের উত্তর বৈধ কিনা বা না, আমি এটি পিএইচপি বিশেষজ্ঞদের কাছে রেখে দিই। আমি মনে করি এটি বৈধ হতে পারে, কারণ এটি ব্রাউজারটি আপনার পিএইচপি অপেক্ষা করছে না (আমি কোনও বিশেষজ্ঞ নই)।
মাইক্রোবিয়ান

1
টেকনিক্যালি পিএইচপি কোনও ওয়েব সার্ভারের মডিউল হিসাবে চালিত হয় এবং আপনার ওয়েব সার্ভারটি পুনরায় আরম্ভ হয় নি, আমি মনে করি আপনি বৈধ কিনা আপনি যদি একটি। Php ফাইলটিকে স্ক্রিপ্ট হিসাবে বিবেচনা করেন এবং স্ক্রিপ্ট একাধিকবার চালিত হয়।
টুইনাইট

@ ট্যুইনাইট প্রতিক্রিয়াটির জন্য ধন্যবাদ, আমি এটির প্রশংসা করি :)
ভেরিওস

2
আপনার দ্বিতীয় সমাধানের জন্য, ব্রাউজারটি একটি পুনর্নির্দেশ লুপ সনাক্ত করে এবং এটি নিজেই থামবে না? thedan1984.com/wp-content/uploads/2012/02/…
আজেদী 32

19

SH

echo $PWD/$0 | at tomorrow

এটি যে কোনও পোস্টিক্স-কমপ্লায়েন্ট সিস্টেমে কাজ করবে।

এটি হত্যা করতে, ফাইলটি মুছুন বা ব্যবহার করুন atrm


17

সজোরে আঘাত

exec "$0"

execনতুন প্রক্রিয়া তৈরি না করে শেলটি প্রতিস্থাপন করে। এটি নিশ্চিত করে যে সেখানে দ্বিতীয় দৃষ্টান্ত থাকতে পারে না।


1
Putোকানো ভাল ~/.bash_profile!
ইগল

@ আইগেল: যখন স্রোস $0হয় -bashতখন .bash_profileএটি কেবল একটি বাক্য গঠন ত্রুটির ফলে ঘটে।
ডেনিস

উফ, আপনি ঠিক বলেছেন।
ইয়েগেল

exec ${0##-}মধ্যে ~/.bash_profileকাজ :-)
yegle

14

উইন্ডোজ টাস্ক শিডিয়ুলার (নেটিভ)

সি ++। সিওএম প্রোগ্রামিংয়ের একটি দুঃস্বপ্ন। সমস্ত চ্যালেঞ্জের প্রয়োজনীয়তা পূরণ করে।

#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <taskschd.h>
#include <comutil.h>

#pragma comment(lib, "taskschd.lib")
#pragma comment(lib, "comsuppw.lib")    

static void timeplus (int seconds, char timestr[30]);


int main () {

    CoInitializeEx(NULL, COINIT_MULTITHREADED);
    CoInitializeSecurity(NULL, -1, NULL, NULL,
        RPC_C_AUTHN_LEVEL_PKT_PRIVACY,
        RPC_C_IMP_LEVEL_IMPERSONATE, NULL, 0, NULL);

    const char *name = "Restarter";

    char path[MAX_PATH + 1];
    GetModuleFileNameA(NULL, path, sizeof(path));
    path[sizeof(path) - 1] = 0; // workaround for xp

    ITaskService *taskman;
    CoCreateInstance(CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER,
        IID_ITaskService, (void **)&taskman);

    taskman->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t());

    ITaskFolder *root;
    taskman->GetFolder(_bstr_t("\\"), &root);

    // Delete the task.
    root->DeleteTask(_bstr_t(name), 0);

    // pause for 5 seconds to give user a chance to kill the cycle
    fprintf(stderr, "If you want to kill the program, close this window now.\n");
    Sleep(5000);
    fprintf(stderr, "Sorry, time's up, maybe next time.\n");

    // Create the task for 5 seconds from now.
    ITaskDefinition *task;
    taskman->NewTask(0, &task);

    IPrincipal *principal;
    task->get_Principal(&principal);
    principal->put_LogonType(TASK_LOGON_INTERACTIVE_TOKEN);

    ITaskSettings *settings;
    task->get_Settings(&settings);
    settings->put_StartWhenAvailable(VARIANT_TRUE);
    settings->put_DisallowStartIfOnBatteries(VARIANT_FALSE);
    settings->put_StopIfGoingOnBatteries(VARIANT_FALSE);

    ITriggerCollection *triggers;
    task->get_Triggers(&triggers);

    ITrigger *trigger;
    triggers->Create(TASK_TRIGGER_TIME, &trigger);

    char when[30];
    ITimeTrigger *trigger_time;
    trigger->QueryInterface(IID_ITimeTrigger, (void **)&trigger_time);
    trigger_time->put_Id(_bstr_t("TimeTrigger"));
    timeplus(10, when);
    trigger_time->put_StartBoundary(_bstr_t(when));
    timeplus(300, when);
    trigger_time->put_EndBoundary(_bstr_t(when));

    IActionCollection *actions;
    task->get_Actions(&actions);

    IAction *action;
    actions->Create(TASK_ACTION_EXEC, &action);

    IExecAction *action_exec;
    action->QueryInterface(IID_IExecAction, (void **)&action_exec);
    action_exec->put_Path(_bstr_t(path));

    IRegisteredTask *regtask;
    root->RegisterTaskDefinition(_bstr_t(name), task,
        TASK_CREATE_OR_UPDATE, _variant_t(), _variant_t(),
        TASK_LOGON_INTERACTIVE_TOKEN, _variant_t(""),
        &regtask);

    regtask->Release();
    action_exec->Release();
    actions->Release();
    trigger_time->Release();
    trigger->Release();
    triggers->Release();
    settings->Release();
    principal->Release();
    task->Release();
    root->Release();
    taskman->Release();
    CoUninitialize();

}


// outputs current utc time + given number of seconds as 
// a string of the form YYYY-MM-DDTHH:MM:SSZ
static void timeplus (int seconds, char timestr[30]) {

    SYSTEMTIME when;
    FILETIME whenf;
    LARGE_INTEGER tempval;

    GetSystemTimeAsFileTime(&whenf);
    tempval.HighPart = whenf.dwHighDateTime;
    tempval.LowPart = whenf.dwLowDateTime;
    tempval.QuadPart += seconds * 10000000LL; // 100 nanosecond units
    whenf.dwHighDateTime = tempval.HighPart;
    whenf.dwLowDateTime = tempval.LowPart;
    FileTimeToSystemTime(&whenf, &when);

    sprintf(timestr, "%04hu-%02hu-%02huT%02hu:%02hu:%02huZ",
        when.wYear, when.wMonth, when.wDay,
        when.wHour, when.wMinute, when.wSecond);

}

এমএসভিসি (বা আপনার যদি সমস্ত নির্ভরতা থাকে তবে মিনজিডাব্লু জিসিসি) দিয়ে সংকলন করুন।

প্রোগ্রামটি 5 সেকেন্ড পরে নিজেকে শুরু করার জন্য উইন্ডোজ টাস্ক শিডিয়ুলারের সাথে এককালীন টাস্ক শুরু এবং নিবন্ধভুক্ত করবে (কন্ট্রোল প্যানেল -> প্রশাসনিক সরঞ্জাম -> টাস্ক শিডিয়ুলার দেখার জন্য, কার্যটির নাম দেওয়া হয়েছে "রিস্টার্টার")। প্রোগ্রামটি টাস্কটি তৈরি করার আগে আপনাকে এটি মারার সুযোগ দেওয়ার জন্য 5 সেকেন্ডের জন্য বিরতি দেবে।

চ্যালেঞ্জ প্রয়োজনীয়তা:

  • শেষ হয়ে গেলে আবার শুরু হয়। হ্যাঁ। প্রোগ্রামটি প্রস্থান করার ঠিক আগে টাস্ক নির্ধারিত।

  • একই সময়ে প্রোগ্রামটি চলমান একের বেশি নয়। হ্যাঁ। প্রোগ্রাম সম্পূর্ণরূপে প্রস্থান করে এবং 5 সেকেন্ডের জন্য চালায় না। এটি শিডিউলার দ্বারা শুরু করা হয়।

  • আপনার চক্র চলাকালীন ব্যবহারকারী দ্বারা ম্যানুয়ালি শুরু হওয়া কোনও উদাহরণ আপনি এড়িয়ে যেতে পারেন। হ্যাঁ, একটি ধ্রুবক টাস্ক নাম ব্যবহারের পার্শ্ব-প্রতিক্রিয়া হিসাবে।

  • যতক্ষণ এটি গ্যারান্টিযুক্ত যে এটি আবার শুরু হয়। হ্যাঁ, টাস্ক শিডিয়ুলার চলমান থাকলে (এটি একটি স্ট্যান্ডার্ড উইন্ডোজ কনফিগারেশনে রয়েছে)।

  • চক্রটি বন্ধ করার একমাত্র উপায় হ'ল প্রক্রিয়াটি হ্রাস করা। হ্যাঁ, প্রক্রিয়াটি চলমান অবস্থায় 5 সেকেন্ডের উইন্ডোর সময় হত্যা করা যেতে পারে। প্রোগ্রামটি 5 সেকেন্ড বিলম্বের আগে টাস্কটি মোছা করে, এই মুহুর্তে এটি হত্যা করা শিডিউলারে কোনও বিপথগামী কাজ ছাড়বে না।

  • আপনার সমাধান পরিবেশ পুনরায় আরম্ভ জড়িত করা উচিত না হ্যাঁ।

যাইহোক, যদি কেউ কখনও ভেবে থাকেন যে উইন্ডোজ অ্যাপ্লিকেশনগুলি কেন এত অস্থির হয়ে পড়েছিল (। নেট এবং সি # এর আগমনের আগে), এটির একটি কারণ। যদি কোনও প্রোগ্রামার এমনকি সামান্যতম বিট অলস হয় (উপরের কোডটি অত্যন্ত অলস) তবে ত্রুটি পরিচালনার পরিমাণ (যদি আমি এটি অন্তর্ভুক্ত করতাম), সংস্থানসমূহ এবং ভার্বোসিটি খুব ত্রুটি-প্রবণ পরিস্থিতি সেট করে।

একটি খুব সহজ এবং খাটো বিকল্প হ'ল schtasks.exe চাওয়া। আমি এটির সাথে একটি .BAT স্ক্রিপ্টে একটি সংস্করণ জমা দিয়েছি ।


13

বিবিসি বেসিক - স্নো পেট্রোলের একটি শ্রদ্ধা

বিবিসিবাসিক.কম এ এমুলেটর

এই এক অন্য কিছু। এটি "রান" গানের একটি শিরোনাম ছাপায় এবং চিয়ার্সের একটি আর্পিজিও বাজায় যাতে আপনি পাশাপাশি গান করতে পারেন। এটি বাস্তবতা দ্বারা অনুপ্রাণিত হয়েছিল যে কার্যকর করার আদেশ (এবং সুতরাং প্রোগ্রামটির শেষ লাইন) অবশ্যই আরআনইউন।

প্রোগ্রামের শুরুতে সমস্ত ভেরিয়েবল সাফ হয়ে যায়, তাই পরবর্তী আয়াতটি কী ছাপতে হবে তা সিদ্ধান্ত নিতে পূর্ববর্তী পুনরাবৃত্তির দ্বারা পিছনের পর্দার রঙটি লাগে takes

    5 C=POINT(0,0) MOD 4
   10 COLOUR 129+C
   15 CLS
   20 RESTORE 110+C
   25 READ A$
   30 PRINT A$
   35 FORK = 1 TO 4
   40   RESTORE K+100
   45   READ P
   50   FORM= 1 TO 8
   55     SOUND 1,-15,P,7
   60     SOUND 1,-15,P-20,7
   65   NEXT
   70 NEXT
  101 DATA 100
  102 DATA 128
  103 DATA 136
  104 DATA 120
  110 DATA Light up light up - As if you have a choice - Even if you can not hear my voice - I'll be right beside you dear.
  111 DATA Louder louder - And we'll run for our lives - I can hardly speak - I understand - Why you can't raise your voice to say.
  112 DATA Slower Slower - We dont have time for that - All I want is to find an easier way - To get out of our little heads.
  113 DATA Have heart my dear - We're bound to be afraid - Even if its just for a few days - Makin' up for all of this mess.
  120 RUN

আউটপুট (4 টি বিভিন্ন স্ক্রিন শটের মন্টেজ)

এখানে চিত্র বর্ণনা লিখুন


"ভাগ করা মেমরি" বিকল্প হিসাবে রঙ সমাধানের জন্য +1।
জোহানেস এইচ।

11

এইচটিএমএল / javascript:

<form /><script>document.forms[0].submit()</script>

কোডটি যে পৃষ্ঠাটি চলছে সেটির ধ্বংসকে ট্রিগার করে, তারপরে ব্রাউজারটি পৃষ্ঠাটি নতুনভাবে লোড করলে নিজেই অন্য একটি ইভেন্টের পুনরায় তৈরি।

আফাইক, বাইরে যাওয়ার একমাত্র উপায় হ'ল পৃষ্ঠাটি যে ট্যাবটি চলছে সেটিকে হত্যা করা।

সম্পাদনা: জনপ্রিয় অনুরোধ অনুসারে, একটি বৈধ HTML5 কোড:

<!doctype html><meta charset=utf-8><title> </title><form></form>
<script>document.forms[0].submit()</script>

@ জেসনসি আমি একমত নই আমি মনে করি যে যুক্তিসঙ্গত পৃষ্ঠাগুলি চশমা মেনে চলতে হবে, তবে জনপ্রিয়তা-প্রতিযোগিতা গুলি বেশ যুক্তিসঙ্গত বলে মনে করা হয়, তাই না? : ডি তাই +1, আমি সত্যিই এটি পছন্দ করি।
yo

10

সি

এই প্রোগ্রামটি অনেকগুলি ম্যালওয়ারের মতো কাজ করে। এটি বন্ধ হওয়ার ঠিক আগে, এটি / tmp ডিরেক্টরিতে একটি শেল স্ক্রিপ্ট তৈরি করে। এটি শেল স্ক্রিপ্ট শুরু করতে জোর করে, যা মূল প্রোগ্রামটিকে মূল পিআইডি বন্ধ এবং বাতিল করতে দেয়। একটি সংক্ষিপ্ত সময়ের (2 সেকেন্ড) পরে শেল স্ক্রিপ্ট প্রোগ্রামের সাথে একটি নতুন প্রক্রিয়া শুরু করে। বংশবৃদ্ধির জন্য, প্রোগ্রামের অবস্থানটি '/ tmp / neverend /' হিসাবে শক্ত ওয়্যার্ড হয়।

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

void rebirth(){
    char t[] = "/tmp/pawnXXXXXX";
    char* pawnfile = mktemp(t);
    if(pawnfile){
        int fd = open(pawnfile, O_RDWR|O_CREAT);
        const char msg[]="sleep 2\n/tmp/neverend\n";
        if(fd>0){
            int n = write(fd, msg, sizeof(msg));
            close(fd);
            pid_t pid = fork();
            if(pid==0){
                char* args[3] = {"bash", pawnfile, NULL};
                execvp(args[0], args);
            }
        }
    }
}

int main(int argc, char* argv[]){
    printf("Starting %s\n", argv[0]);
    atexit(rebirth);
    printf("Exiting %s\n", argv[0]);
}

একবারে কেবলমাত্র 'নেভেরেন্ড' প্রক্রিয়া চলছে। প্রতিটি নতুন প্রক্রিয়া একটি নতুন পিআইডি পায়। এটি মারার সবচেয়ে সহজ উপায় হ'ল এক্সিকিউটেবলকে মুছে ফেলা। আপনি যদি এটি আরও মারাত্মক করে তুলতে চেয়েছিলেন তবে প্রোগ্রামটিতে যে কোনও সময়ে একাধিক অনুলিপি রয়েছে তা নিশ্চিত করতে আপনি এক্সিকিউটেবল এবং স্ক্রিপ্ট উভয়ই অনুলিপি করতে পারেন।


1
আমি আরও উদ্ভাবনী উত্তর আশা করি। 'পরিপূরক প্রোগ্রাম' সম্পর্কিত প্রশ্নের জন্য মন্তব্যগুলি দেখুন। আমার কাছে, পরিপূরক প্রোগ্রামটি আপনার প্রোগ্রামের কেবলমাত্র একটি অংশ যা চারদিকে স্তব্ধ।
মাইক্রোবিয়ান

4
ফোর্কিংয়ের অর্থ আপনার কাছে একই সময়ে প্রক্রিয়াটি চলার দুটি উদাহরণ থাকবে, এমনকি তারা বিভিন্ন কাজ করে থাকলেও।
ব্যারি ফ্রুটম্যান

সত্যিই দুটি ভিন্ন এক্সিকিউটেবল ব্যবহার করে @ ব্যারিফ্রুটম্যানকে এড়ানো সহজ। এটি বৈধ, তবে মার্জিত কম।
জোহানেস এইচ।

আমি মনে করি আপনি system()যদি নিয়মাবলী /bin/shহিসাবে একটি কাঁটাচামচ + এক্সিকে পরিপূরক প্রোগ্রাম হিসাবে গণনা না করে আপনি ব্যবহার করতে পারেন ।
জেসন সি

10

পার্ল

`perl -e"kill 9,$$"|perl $0`

স্ক্রিপ্টটি নিজেকে হত্যা করার জন্য একটি সিস্টেম কমান্ড জারি করে এবং ফলাফলটিকে নিজেই অন্য একটি ইভেন্টে পাইপ করে। পার্ল ইন্টারপ্রেটার ক্রস প্ল্যাটফর্ম কারণে, হত্যাকাণ্ড করতে ব্যবহৃত হয়।

স্ক্রিপ্টটি মুছে ফেলে পাগলামি বন্ধ করুন।


7

আটারি 8-বিট বেসিক

1L.:R.

টোকেনাইজ করে:

1 LIST : RUN

তালিকা থেকে এটি আবার চালানোর আগে অভ্যন্তরীণভাবে এটি অভ্যন্তরীণ কাঠামো পরিষ্কার করছে, প্রোগ্রামটি মুছে ফেলা হয় it

এটি মৌলিকভাবে থেকে পৃথক:

1L.:G.1

যা টোকেনাইজ করে:

1 LIST : GOTO 1

এটি একটি বেসিক অসীম লুপ। আপনি এগুলি চালানোর সময় আপনি গতির পার্থক্য দেখতে পাবেন (প্রথমটি ধীরে ধীরে)।


প্রোগ্রাম কার্যকর করার সময় "তালিকা" কেন কোনও অভ্যন্তরীণ কাঠামো পরিষ্কার করে দেবে তা আমি পুরোপুরি পরিষ্কার নই not আমার মনে হয় আটারির একটি কীবোর্ড বাফার রয়েছে, সুতরাং কেউ প্রোগ্রামটি তালিকাভুক্ত করতে পারে, এটি চালানোর জন্য কীস্ট্রোকগুলি স্টাফ করতে পারে এবং এটি "পুনরায় টাইপ" করতে অবস্থিত কার্সারের সাহায্যে একটি "নতুন" করতে পারে।
সুপারক্যাট

@ সুপের্যাট - তালিকা দেয় না, রান করে না।

এই যুক্তি অনুসারে, কেউ "তালিকা" বাদ দিতে পারে। অন্যদিকে, প্রোগ্রামটি কিছু ক্যারিজ রিটার্ন সহ কীবোর্ড বাফারটি স্টাফ করে, প্রোগ্রামের পরে "নতুন" এবং স্ক্রিনের ডান দাগগুলিতে "আরআন" রাখে, কার্সারটি রেখেছিল এবং বাইরে বেরিয়ে যায়, এটি সত্যই নিজেকে মুছে ফেলবে would এবং স্বয়ংক্রিয়ভাবে নিজেকে পুনরায় টাইপ করুন।
সুপারক্যাট

@ সুপের্যাট - এটি ছাড়া LISTআপনি এটি চলমান দেখবেন না। আমি বেছে নিয়েছি LISTকারণ এর মধ্যে সংক্ষিপ্ততম ইনপুট রয়েছে L.। আমি এটি একটি কীবোর্ড বাফারে রাখার ধারণা পছন্দ করি, এটি অবশ্যই যথেষ্ট সংক্ষিপ্ত!

আমি কি সঠিকভাবে মনে রাখছি যে কমোডোর মেশিনগুলির মতো আটারি যখন আপনি ধাক্কা দেবেন তখন স্ক্রিনে পাঠ্য পড়ে Return? কীবোর্ড বাফারটি কত বড়? ভিসি -20 এবং সি 64 এ, এটি দশ বাইট। এমন একটি প্রোগ্রাম যা কীবোর্ড বাফার লোড করার জন্য পর্যাপ্ত পরিমাণে পোকে পারে সম্ভবত কীবোর্ড বাফারের সাথে খাপ খায় না, তবে আমি এমন প্রোগ্রাম লিখেছি যা স্ক্রিনে পরিবর্তনগুলি মুদ্রণ করে নিজেরাই সংশোধন করতে পারে RUNএবং কয়েকটি Returnকীস্ট্রোক স্টাফ করে । এই জাতীয় জিনিসগুলি বিশেষত 64 টিতে কার্যকর ছিল কারণ এটির INএকটি প্রোগ্রামে লাইন মার্জ করার জন্য আটারির [আইআইআরসি] কমান্ড ছিল না।
সুপারক্যাট

5

আইবিএম মেইনফ্রেম চলমান জেড / ওএসে আপনি একটি ইউটিলিটি চালান যা কোনও ডেটাসেট (ফাইল) অন্য কোনও ডাটাসেট (ফাইল) অনুলিপি করে। ইনপুটটি জেসিএল (জব কন্ট্রোল ল্যাঙ্গুয়েজ) এর উত্স যা আপনি এটি চালনার জন্য জমা দিয়েছেন। আউটপুটটি ইন্টারনাল রিডার (আইএনটিআরডিআর)। আপনার সিস্টেমটি একাধিক অভিন্ন কাজের নাম চলতে দেয় না তাও নিশ্চিত করতে হবে to একটি চাকরির শ্রেণি ব্যবহার করা ভাল যার কেবলমাত্র একজন উদ্যোগী (যেখানে কোনও জেওবি ব্যাচে চালাতে পারে)।

কোনও পিআইডি জড়িত নেই (জেড / ওএসে), তাই চ্যালেঞ্জ সেটটি ব্যর্থ করে।

আপনি জল নিষ্কাশন এবং / বা ফ্লাশ করে প্রক্রিয়াটি থামিয়ে দিন। যদি কিছু ভুল হয়ে থাকে তবে জল ফেলে এবং / অথবা ফ্লাশ করে, কসম খেয়ে, লাথি মেরে, একটি উষ্ণ-সূচনা করার চেষ্টা করে এবং শেষ পর্যন্ত একটি শীতল-সূচনা করে বা বিগ রেড বোতামটি আঘাত করে (এবং প্রোগ্রামারটির শুটিং))

আমি হয়ত পথে অতিরঞ্জিত হয়েছি, তবে এটি কাজ করে দেখুন না ...

SORT ব্যবহার করে উদাহরণ। জওবি কার্ডের বিবরণগুলি খুব সাইট-নির্ভর। সাইট নীতি হয় হয় INTRDR ব্যবহার নিষিদ্ধ বা প্রতিরোধ করতে পারে। আইএনটিআরডিআর ব্যবহারের জন্য একটি নির্দিষ্ট শ্রেণির প্রয়োজন হতে পারে। আপনার সাইটের নীতি যদি এর ব্যবহার নিষিদ্ধ করে তবে আপনি যদি কার্ডবোর্ড বাক্সে হাঁটার জন্য আপনার জিনিসপত্র না নিতে চান তবে এটি ব্যবহার করবেন না

যদিও আইএনটিআরডিআর এর ভাল ব্যবহার রয়েছে তবে এ উদ্দেশ্যে এটি ব্যবহার করবেন না । এমনকি আপনার বাক্সটি পাওয়ার সুযোগও পাবেন না।

//jobname JOB rest is to your site standards
//* 
//STEP0100 EXEC PGM=SORT 
//SYSOUT   DD SYSOUT=* 
//SORTOUT  DD SYSOUT=(,INTRDR) minimum required, site may require more 
//SYSIN    DD * 
  OPTION COPY 
//SORTIN   DD DISP=SHR,DSN=YOUR.LIBRARY.WITHJOB(JOBMEMBR) 

অন্যান্য ইউটিলিটি উপলব্ধ। একটি দ্রুত প্রোগ্রাম পাশাপাশি করা সহজ হবে, কেবল একটি ফাইল পড়ুন, একটি ফাইল লিখুন।

আপনি যদি এটির ভুল হওয়ার উদাহরণ চান তবে চেষ্টা করুন: http://ibmmainframes.com/viewtopic.php?p=282414#282414

একটি ডেটাসেট অনুলিপি করার traditionalতিহ্যগত উপায় হ'ল আইবিএম ইউটিলিটি আইইবিজেইএনআর, তাদের মন্তব্যে ইউগ্রোরেন সংকেত হিসাবে use

যাইহোক, আজকাল, অনেকগুলি সাইটগুলিতে আইসিইজিএনইআর-এর "আইজিজেন" থাকবে al আইসিইজিএনআর যদি এটি করতে পারে তবে একটি অনুলিপি করতে আইবিএম এর ডিএফএসএআরটি (বা এর প্রতিদ্বন্দ্বী সিঙ্কসর্ট) ব্যবহার করবে, কারণ আইওবিগনারের তুলনায় সোর্ট পণ্যগুলি আইও-র জন্য অনেক বেশি হাইহগলি অনুকূলিত হয়েছে।

আমি কেবল সোর্ট ব্যবহার করে মধ্যবিত্তকে কাটছি।

আপনি যদি কোনও আইবিএম মেইনফ্রেম সাইটে কাজ করেন তবে আপনি যে JOB কার্ডটি ব্যবহার করবেন সেটির ফর্ম্যাটটি জানেন। ন্যূনতম JOB কার্ডটি আমি মন্তব্য হিসাবে দেখিয়েছি is মন্তব্যটি গুরুত্বপূর্ণ হবে, কারণ আপনি উদাহরণস্বরূপ অ্যাকাউন্টিং সম্পর্কিত তথ্য সরবরাহ করছেন বলে মনে করা হচ্ছে। কাজের নামটিতে সম্ভবত সাইট-নির্দিষ্ট ফর্ম্যাট থাকবে।

কিছু সাইট INTRDR ব্যবহার নিষিদ্ধ বা প্রতিরোধ করে। সচেতন থাকা.

কিছু সাইট একই নামের একাধিক কাজ একই সাথে চালানোর অনুমতি দেয়। সচেতন থাকা.

যদিও আপনি যদি কোনও সিস্টেমের প্রোগ্রামার না হন তবে আপনি এ জাতীয় ক্লাস স্থাপন করতে পারবেন না, আপনার এমন একটি শ্রেণীর সন্ধান করা উচিত যা কেবলমাত্র একজন উদ্যোগীকে অনুমতি দেয়। এটির সাথে, প্রক্রিয়াটি মোটামুটি নিরাপদ - তবে শ্রেণিটি বর্ণিত হিসাবে কাজ করছে তা সম্পর্কে সম্পূর্ণ নিশ্চিত হন। পরীক্ষা করুন। এই কাজটি নিয়ে নয়।

আপনি যদি কোনও সিস্টেমের প্রোগ্রামার হন তবে আপনার রেমিটের বাইরে কিছু না করা আপনি জানেন। 'নফ বলল।

একই নামের সাথে একই সময়ে অনুমোদিত একক কাজ এবং একক সূচনাকারী, এই কাজ শুরু করার / ধীরে ধীরে পরবর্তী কাজ শুরু / সমাপ্তি হবে - যতক্ষণ না আপনি স্পুলটি পূরণ করবেন (অন্য কোনও খারাপ কাজ) যতক্ষণ না আপনি আউটপুট দিয়ে আউট করে দিয়ে থাকেন হাজার হাজার চাকরী (বা চাকরির সংখ্যাটি শেষ)। সতর্কতা বার্তার জন্য একটি জেএস কনসোল দেখুন।

মূলত, এটি করবেন না। আপনি যদি এটি করেন তবে এটি কোনও প্রোডাকশন মেশিনে করবেন না।

কিছুটা ব্রাশ করার সাথে সাথে আমি অন্য আইবিএম মেইনফ্রেম অপারেটিং সিস্টেম, জেড / ভিএসই ... জেড / ভিএসএতে জেসিএল ব্যবহার করে এটি কীভাবে করা যায় তার জন্য আমি অন্য উত্তর বিবেচনা করব। জেড / ওএস জেসিএল ব্যবহার করে। তারা ভিন্ন ধরনের :-)


ধারণাটি ভাল দেখাচ্ছে, তবে এটি কোনও উত্তর নয়। আমাদের জেসিএল - জওবি, এক্সইসি এবং ডিডি দেখান - তবে এটির উত্তর হবে।
ugoren

ভয়াবহ দীর্ঘ সময়ের জন্য কোনও কাজ জমা দেয়নি, তাই আমি কী করব তা নিশ্চিত নই। অনুপস্থিত অংশগুলি যদি কেবল স্থানীয় কাস্টমাইজেশন হয় তবে ঠিক আছে। তবে আপনি যদি কোনও অপব্যবহার রোধ করার জন্য জিনিসগুলি আড়াল করে রাখেন, তবে নিজের মন আপ করুন - আসল জিনিসটি পোস্ট করুন বা কিছুই পোস্ট করেন না। পিএস আমরা IEBGENERতখন সহজেই অনুলিপি করতে ব্যবহৃত ।
ugoren

IEBGENER কেন কাজের জন্য নির্বাচিত হয়নি তা ব্যাখ্যা সহ আরও যুগোপযোগী আপডেট করুন n জওবি বিবৃতিতে মন্তব্য পাঠ্য অপসারণ এটি চালনার জন্য প্রয়োজনীয় জেসিএল দেয়, তবে এটি জেসিএল হওয়ায় কাজ করার জন্য বা প্রোগ্রামারকে বরখাস্ত করা এড়ানোর জন্য স্থানীয় সাইটের মান নির্ভর করে।
বিল উড্ডার

4

পাইথন (72 বাইট)

import os
os.system('kill -9 %s && python %s' % (os.getpid(), __file__))

আমার মনে হয় আরও ছোট করা যায়। প্রথমত, ফাইলটির নাম হার্ডকোড করে (ব্যবহারের পরিবর্তে __file__)। তবে এখানে, আপনি এই কোডটি কোনও ফাইলে রাখতে পারেন এবং এটি চালাতে পারেন, এর নাম যাই হোক না কেন :)


আপনি সম্ভবত পরিবর্তন &&করতে পারেন &
হোশেচ 250

1
যেহেতু এটি অনুমোদিত হয়, ব্যবহারকারী 2509848?
রাইময়েড

ঠিক আছে, আপনি
শ্বেত স্থানটি

6
যেহেতু এটি কোড-গল্ফ ট্যাগ নয় , আমি কোডটি এইভাবে রাখব :-)
ম্যাক্সিমিয়াম লরেন্ট

4

উইন্ডোজ টাস্ক শিডিয়ুলার (.BAT)

উইন্ডোজ ব্যাচ স্ক্রিপ্ট। সমস্ত চ্যালেঞ্জের প্রয়োজনীয়তা পূরণ করে।

আমি যতদূর দেখতে পাচ্ছি এটিই এখন পর্যন্ত একমাত্র উইন্ডোজ সমাধান যা সমস্ত প্রয়োজনীয়তা পূরণ করে এবং এতে কোনও মানহীন নির্ভরতা নেই (আমার অন্যান্য সমাধানটি একই রকম তবে সংকলন প্রয়োজন)।

@ECHO OFF
SETLOCAL

schtasks /Delete /TN RestarterCL /F

ECHO Close this window now to stop.
TIMEOUT /T 5

FOR /f "tokens=1-2 delims=: " %%a IN ("%TIME%") DO SET /A now=%%a*60+%%b
SET /A start=%now%+1
SET /A starth=100+(%start%/60)%%24
SET /A startm=100+%start%%%60
SET /A end=%now%+3
SET /A endh=100+(%end%/60)%%24
SET /A endm=100+%end%%%60

schtasks /Create /SC ONCE /TN RestarterCL /RI 1 /ST %starth:~1,2%:%startm:~1,2% /ET %endh:~1,2%:%endm:~1,2% /IT /Z /F /TR "%~dpnx0"

ENDLOCAL

প্রোগ্রামটি আমার সি ++ / সিওএম উত্তরের অনুরূপ আচরণ করে ।

প্রোগ্রামটি 60০ সেকেন্ড পরে নিজেকে শুরু করার জন্য উইন্ডোজ টাস্ক শিডিয়ুলারের সাথে এককালীন টাস্ক শুরু এবং নিবন্ধভুক্ত করবে (কন্ট্রোল প্যানেল -> প্রশাসনিক সরঞ্জাম -> টাস্ক শিডিয়ুলার দেখার জন্য, কার্যটির নাম দেওয়া হয়েছে "রিস্টার্টার")। প্রোগ্রামটি টাস্কটি তৈরি করার আগে আপনাকে এটি মারার সুযোগ দেওয়ার জন্য 5 সেকেন্ডের জন্য বিরতি দেবে।

কমান্ড লাইন টাস্ক শিডিয়ুল ইন্টারফেস ব্যবহার করে schtasks.exe। স্ক্রিপ্টে পাটিগণিত হ'ল সময়কে বৈধ রাখার সময় এবং এইচএইচ: এমএম ফর্ম্যাটে টাইম অফসেটগুলি গণনা করা।

চ্যালেঞ্জ প্রয়োজনীয়তা:

  • শেষ হয়ে গেলে আবার শুরু হয়। হ্যাঁ। প্রোগ্রামটি প্রস্থান করার ঠিক আগে টাস্ক নির্ধারিত।

  • একই সময়ে প্রোগ্রামটি চলমান একের বেশি নয়। হ্যাঁ। প্রোগ্রাম সম্পূর্ণরূপে প্রস্থান করে এবং seconds 60 সেকেন্ডের জন্য চালায় না। এটি শিডিউলার দ্বারা শুরু করা হয়।

  • আপনার চক্র চলাকালীন ব্যবহারকারী দ্বারা ম্যানুয়ালি শুরু হওয়া কোনও উদাহরণ আপনি এড়িয়ে যেতে পারেন। হ্যাঁ, একটি ধ্রুবক টাস্ক নাম ব্যবহারের পার্শ্ব-প্রতিক্রিয়া হিসাবে।

  • যতক্ষণ এটি গ্যারান্টিযুক্ত যে এটি আবার শুরু হয়। হ্যাঁ, টাস্ক শিডিয়ুলার চলমান রয়েছে এবং schtasks.exe উপস্থিত থাকলে (ডিফল্ট উইন্ডোজ কনফিগারেশনে উভয়ই সত্য) provided

  • চক্রটি বন্ধ করার একমাত্র উপায় হ'ল প্রক্রিয়াটি হ্রাস করা। হ্যাঁ, প্রক্রিয়াটি চলমান অবস্থায় 5 সেকেন্ডের উইন্ডোর সময় হত্যা করা যেতে পারে। প্রোগ্রামটি 5 সেকেন্ড বিলম্বের আগে টাস্কটি মোছা করে, এই মুহুর্তে এটি হত্যা করা শিডিউলারে কোনও বিপথগামী কাজ ছাড়বে না।

  • আপনার সমাধান পরিবেশ পুনরায় আরম্ভ জড়িত করা উচিত না হ্যাঁ।

দ্রষ্টব্য: সীমিত কমান্ড লাইন ইন্টারফেসের কারণে, পুনরায় সূচনা করার সময়টি অবশ্যই কয়েক মিনিটের মধ্যে নির্দিষ্ট করতে হবে এবং এসি অ্যাডাপ্টারের প্লাগ ইন না করে (দুঃখিত) ল্যাপটপগুলিতে টাস্কটি পুনরায় আরম্ভ হবে না


3

ইউনিক্স শেল

আমি এখনও অনেকগুলি সমাধান দেখিনি যা এটি পুনরায় চালু করতে কোনও সম্পর্কযুক্ত প্রোগ্রামের উপর নির্ভর করে। তবে at(1)ইউটিলিটিটি ঠিক এর জন্য তৈরি হয়েছিল:

echo "/bin/sh $0"|at now + 1 minute

প্রোগ্রামটি চলমান আসলে ধরা খুব শক্ত, যেহেতু এটি প্রতি মিনিটে একবার চালিত হয় এবং এত তাড়াতাড়ি প্রস্থান করে। ভাগ্যক্রমে atq(1)ইউটিলিটি আপনাকে দেখায় যে এটি এখনও চলছে:

$ atq
493     Fri Feb 21 18:08:00 2014 a breadbox
$ sleep 60
$ atq
494     Fri Feb 21 18:09:00 2014 a breadbox

এবং atrm(1)আপনাকে চক্রটি ভাঙ্গতে দেবে:

$ atq
495     Fri Feb 21 18:10:00 2014 a breadbox
$ atrm 495
$ atq

আপনি 1 minuteসাথে প্রতিস্থাপন করতে পারেন 1 hour, বা 1 week। বা 1461 daysপ্রতি 4 বছরে একবার চালিত এমন একটি প্রোগ্রাম দেওয়ার জন্য এটি দিন ।


2

শক্তির উৎস

আমি আমার নিজের নিয়মকে গালি দিচ্ছি (এবং সম্ভবত ভঙ্গ করছি)।

[System.Threading.Thread]::Sleep(-1)

নিজেকে পুনরায় আরম্ভ করতে এটি অসীম পরিমাণ সময় নেয়।
এটি হোস্ট প্রক্রিয়া হত্যা করে হত্যা করা যেতে পারে।

শুধু অপেক্ষা করুন এবং দেখুন ;)


5
সৃজনশীলতার জন্য +1, তবে প্রতারণার জন্য -1।
জোহানেস এইচ।

1
হা, তবে এটি "গ্যারান্টিযুক্ত যে এটি আবার শুরু হয়" যদি এটি কখনও থামে না?
জেসন সি

সে কারণেই আমি বলেছিলাম আমি সম্ভবত নিয়ম ভঙ্গ করছি। এটি অনন্তের দার্শনিক সৌন্দর্য যা আপনি ধরে নিতে পারেন যে এর পরে কিছু ঘটতে পারে। টুরিং মেশিনও সেভাবে কাজ করে।
মাইক্রোবিয়ান

1
-100 কারণ আমি আপনাকে নিজের প্রতিযোগিতা জিততে সমর্থন করি না, বিশেষত কোনও প্রযুক্তিগত দিক দিয়ে, তবে +101 কারণ এটি পুনরায় আরম্ভের জন্য অপেক্ষা করা এখনকার সেরা বিলম্বের বাহানা।
জেসন সি

ভাল, আপনি জানেন, তারপর while true; do sleep 1; donequilifies, তাই না?
yo '

2

সজোরে আঘাত

echo -e "$(crontab -l)\n$(($(date "+%M")+1)) $(date '+%H %e %m * /repeat.sh')" | crontab -

এটিকে / ডিরেক্টরিতে রিপিট.শ হিসাবে সংরক্ষণ করুন এবং এটিকে সম্পাদনের অনুমতি দিন। ফাইলটি মুছে ফেলে এটি হত্যা করা যেতে পারে

এটি 1 মিনিট পরে চালানোর জন্য ক্রন্টবে একটি এন্ট্রি রেখে কাজ করে।


2

ভিজ্যুয়াল বেস 6 :)

Sub Main:Shell "cmd ping 1.1.1.1 -n 1 -w 500>nul&&"""&App.Path &"\"&App.EXEName& """":End Sub

চালানোর জন্য, একটি নতুন প্রকল্প তৈরি করুন, এই কোড সহ একটি মডিউল যুক্ত করুন, "সাব মেইন" এ স্টার্ট-আপ অবজেক্ট সেট করুন, সংকলন করুন এবং তারপরে এক্সিকিউটেবল রান করুন।


আরও পঠনযোগ্য সংস্করণ:

Sub Main()
    Call Shell("cmd ping 1.1.1.1 -n 1 -w 3000 > nul && """ & App.Path & "\" & App.EXEName & """")
End Sub

ভিবি 6 সত্যিকারের মানুষের ভিবি। তার ধরণের শেষ!
জেসন সি


1

সজোরে আঘাত

এটি হওয়ার চেয়ে বেশি দীর্ঘ, তবে আমি ক্লান্ত হয়ে পড়েছি, যত্ন নেই :)

while true; do sleep 1; done; bash $0;

আপনি বলেছিলেন যে এটি শেষ হয়ে গেলে এটিকে পুনরায় চালু করতে হবে, আপনি বিশেষভাবে বলেননি যে এটি বারবার বা অনির্দিষ্টকালের জন্য এমনটি করতে হয়েছিল। এছাড়াও, আপনি বলেছিলেন যে এটির একবারে দুটি দৃষ্টান্ত চলবে না ... এটি কখনই চলবে না। ;)

এটি করার যে কোনও দুর্দান্ত উপায় রয়েছে। আমার ব্যক্তিগত প্রিয়, এমন কিছু করা যেমন প্যাকেট দূরে কোথাও প্রেরণ করা, এবং তারপরে (যে কোনও পদ্ধতিতে) এর প্রতিক্রিয়াটি প্রক্রিয়াটিকে ট্রিগার করে।


প্রযুক্তিগতভাবে, sleepপ্রক্রিয়াটি শেষ হয়ে গেলে পুনরায় চালু হয়
পেস্টবিন ডট কম 0mr8spkT

প্রোগ্রামটি যদি এমন কোনও প্রোগ্রাম হয় যা এটি স্বয়ংক্রিয়ভাবে পুনরায় চালু হয় , তবে তা বোঝানো হয় যে এটি অনির্দিষ্টকালের জন্য করতে হবে - অন্যথায় এটি অন্য কোনও কিছু পুনরায় আরম্ভ করছে যা নিজে নয়।
জেসন সি

@ জেসন সি: খুব বেশি দার্শনিক না পেয়ে, যতটা সম্ভব এটি সম্ভব, এটি নিজেই আবার চালু হয়। আমরা বিতর্ক পারে কিভাবে জটিল এটি সত্যিই এটিকে পুনর্সূচনা করা হয়েছে স্ব , কিন্তু আমি মনে করি যে ভাল কি লেখক বোঝানো পরলোক আছে। যদিও আপনি যদি এটি সত্যই নিজেকে আবার চালু করতে চান তবে সম্ভবত এটি গোটো, বা জেএমপি ব্যবহার করে বা আপনার ভাষায় যা কিছু নির্মাণ করতে পারে তা আবার শুরুতে যেতে পারে, সুতরাং এটি নিজেই "পুনরায় চালু করা"। অন্যথায়, এটি কেবল নিজের মতো আলাদা কিছু চালিয়ে যাচ্ছে। তবে তারপরে কেউ সম্ভবত এটি নিয়ে যাবে যে এটি সত্যই পুনরায় আরম্ভ হচ্ছে না। তাই আমি খনন করি।
ইয়ান উইজার্ড

1

অ্যান্ড্রয়েড: একটি অ্যালার্ম 1 সেকেন্ডের পরে ক্রিয়াকলাপটি পুনরায় চালু করবে

public class AutoRestart extends Activity
{

@Override
public void onCreate()
{
    finish();
}

@Override
public void onDestroy() {

    Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
    restartServiceIntent.setPackage(getPackageName());

    PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT);
    AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    alarmService.set(
            AlarmManager.ELAPSED_REALTIME,
            SystemClock.elapsedRealtime() + 1000,
            restartServicePendingIntent);

    super.onDestroy();
}

}

1

সি + এমপিআই এনভায়রনমেন্ট

mpifork.c:

#include <stdio.h>

main(int argc, char * argv[])
{
    srand(time(NULL));
    int host = rand()%(argc-1)+1;
    FILE * logFile = fopen("mpifork.log", "a");
    if(logFile == NULL){
        fprintf(stderr, "Error: failed to open log file\n");
    } else {
        fprintf(logfile, "Jumping to %s\n", argv[host]);

        char * args[argc+5];
        args[0] = "mpirun";
        args[1] = "-H";
        args[2] = argv[host];
        args[3] = argv[0];
        for(host = 0; host < argc-1; host++) args[host+4] = argv[host+1];
        args[argc+3] = NULL;

        execvp("mpirun", args);
        fprintf(stderr, "exec died\n");
        perror("execvp");
    }
}

আপনার অবশ্যই ওপেনএমপিআই বা অন্য কোনও এমপিআই বাস্তবায়ন ইনস্টলড থাকতে হবে। সঙ্গে সংকলন

mpicc -o mpifork mpifork.c

এখন যেহেতু আমি এটি সম্পর্কে চিন্তা করি, আপনার এমপিক - জিসিসি বা যে কোনও সংকলক কাজ করবে তা ব্যবহার করার কোনও কারণ নেই। আপনার শুধু এমপিরুন থাকতে হবে।

gcc -o mpifork mpifork.c

এটি চালানোর জন্য, আপনার সম্ভবত পুরো পথের নাম অন্তর্ভুক্ত করা উচিত, এবং হোস্টগুলির একটি তালিকা অন্তর্ভুক্ত করা উচিত। উদাহরণস্বরূপ, আমি / ইত্যাদি / হোস্টগুলিতে কিছু এন্ট্রি যুক্ত করেছি যা সমস্ত লোকালহোস্টের দিকে নির্দেশ করেছে এবং এটি এ জাতীয়ভাবে চালিয়েছে:

/home/phil/mpifork localhost localhost1 localhost2 localhost3 localhost4

এক্সিকিউটেবল যে কোনও মেশিনে আপনি এটি চালাতে চান তেমন ডিরেক্টরিতে থাকতে হবে।


মূলত, এটি কমান্ড লাইনে প্রদত্ত হোস্টগুলির একটি তালিকা গ্রহণ করে, হোস্টগুলির মধ্যে একটি নির্বাচন করে এবং একই আর্গুমেন্টের সাথে লক্ষ্য হোস্টে এক্সিকিউটেবল প্রবর্তন করে। সবকিছু ঠিকভাবে যায়, mpirun নিজেই উপর কল হবে এবং বিভিন্ন মেশিন (বা একই মেশিনে উপর আপনি শুধুমাত্র 'স্থানীয় হোস্ট' প্রদান এক্সিকিউটেবল নিজেই (mpifork) বিনষ্ট করে -। কলিং পর execvp, এটা কোনো প্রথম মেশিনে নির্বাহ করা হয়।

আপনি যদি মন্দ হতে চেয়েছিলেন তবে আপনি কমান্ড লাইনে প্রদত্ত হোস্টের সম্পূর্ণ তালিকা অন্তর্ভুক্ত করে প্রতিটি মেশিনে এই লঞ্চটি করতে পারবেন args। এটি বার বার প্রতিটি মেশিনে নিজের একটি অনুলিপি আবার স্প্যান করবে - একটি ক্লাস্টার ফর্কবম্ব।

তবে এই ফর্মটিতে আমি নিশ্চিত যে এটি নিয়মকে সন্তুষ্ট করে।


1

জাভাস্ক্রিপ্ট

যখন প্রয়োজন হয় না তখন "নেটওয়ার্কে যান" ছাড়া :-) জাভাস্ক্রিপ্টের ইভেন্টের লুপ শিডিয়ুলিং আমাদের দেওয়া প্রোগ্রামগুলি খুব সহজেই পূরণ করে এমন প্রোগ্রামগুলি লেখার অনুমতি দেয়:

(function program() {
    // do what needs to be done
    setTimeout(program, 100);
})();

এটি programপ্রতি সেকেন্ডে 10-বার-গতিতে ফাংশনটি "পুনরায় চালু" করে । এটি জাভাস্ক্রিপ্টের প্রকৃতির দ্বারা গ্যারান্টিযুক্ত যে একই সময়ে কেবলমাত্র একটি একক টাস্ক চলবে এবং এটি "পৃষ্ঠাটি পুনরায় লোড করুন" এর মতো "পরিবেশ পুনরায় আরম্ভ করবে না"।


0

x86 সমাবেশ

এটি সম্পূর্ণরূপে নিশ্চিত নয় যে এটি আপনার মাপদণ্ডের সাথে খাপ খায় কারণ এটি কোনও নতুন প্রক্রিয়া উত্সাহ দেয় না, তবে এখানে এটি যাইহোক।

প্রোগ্রামটি একটি বার্তা বাক্স প্রদর্শন করবে, কিছু মেমরি বরাদ্দ করবে, বরাদ্দ মেমরিতে তার নিজস্ব কোড বিভাগটি অনুলিপি করবে এবং তারপরে চক্রটি শুরু করে সেই জায়গায় চলে যাবে। ম্যালোক ব্যর্থ হওয়া অবধি এটি চলতে হবে।

format PE GUI 4.0
entry a

include 'include/win32a.inc'

section '.text' code readable executable

    a:
        push    0
        push    _caption
        push    _message
        push    0
        call    [MessageBoxA]

        push    b-a
        call    [malloc]

        push    b-a
        push    a
        push    eax
        call    [memcpy]

        call    eax
    b:

section '.data' data readable writeable

    _caption db 'Code challenge',0
    _message db 'Hello World!',0

section '.idata' import data readable writeable

    library user,'USER32.DLL',\
        msvcrt,'msvcrt.dll'

    import user,\
        MessageBoxA,'MessageBoxA'

    import msvcrt,\
        malloc,'malloc',\
        memcpy,'memcpy'

ফাস্টম সহ সংকলিত


4
যেহেতু সদ্য অনুলিপি করা কোডটি কল করা আপনার প্রোগ্রামের অংশ তাই প্রযুক্তিগতভাবে আপনার প্রোগ্রামটি একেবারেই শেষ হয়নি।
মাইক্রোবিয়ান

6
নিম্ন স্তরের দৃষ্টিকোণ থেকে, এখানে সমস্ত প্রোগ্রামের ক্ষেত্রে একই কথা বলা যেতে পারে। :-)
ব্রায়ান নোব্লাচ

নিবন্ধন করুন এখানে সর্বাধিক আকর্ষণীয় উত্তরগুলি সিস্টেমের পরিবেশটিকে পরিবর্তন করতে পারে বলে মনে হচ্ছে যাতে প্রথমটি মারা যাওয়ার পরে প্রক্রিয়াটির একটি নতুন অনুলিপি শুরু হয়। উদাহরণস্বরূপ, আমি ভাবব যে ভবিষ্যতে প্রক্রিয়াটি চালানোর জন্য ক্রোন জব তৈরি করা প্রক্রিয়াটিকে পুরোপুরি মরতে দেওয়া, তারপরে পুনরায় আরম্ভ করার একটি ভাল উপায়।
কেভিন - মনিকা পুনরায়

2
পছন্দ করেছেন প্রক্রিয়াটি একটি অপারেটিং সিস্টেম কনস্ট্রাক্ট (যা এই দিনগুলিতে - 1982 সালের ২66-এ সুরক্ষিত মোডের আগমন হিসাবে - ভার্চুয়াল অ্যাড্রেস স্পেস এবং সুরক্ষিত মেমোরির মাধ্যমে হার্ডওয়্যার দ্বারাও সমর্থন পাওয়া যায়)। এটি শেষ হয়ে গেলে, সমস্ত তথ্য চলে যায়। যদিও চ্যালেঞ্জটিতে এটি স্পষ্টভাবে বলা হয়নি, আমি চ্যালেঞ্জের স্পিরিটটি গ্রহণ করি মানে "পুনঃসূচনা" বলতে বোঝায় যে একটি নতুন প্রক্রিয়া আইডি নির্ধারিত হয়েছে।
জেসন সি

ঠিক আছে, আপনি যদি পথে পথে মেমরিটি মুক্ত করতে সক্ষম হন তবে আমি +1 দেব (আপনি @একবার পরিচালনা করার পরে দয়া করে আমাকে পিং করুন , যেহেতু আমি সম্ভবত এতে নজর রাখব না)।
yo

0

লিনাক্স upstart init

প্রশ্নের কঠোরতম পাঠ দেওয়া, আমি মনে করি এটি অসম্ভব। সংক্ষেপে এটি অন্য কোনও চলমান প্রোগ্রামের সহায়তায় স্বতঃস্ফূর্তভাবে একটি প্রোগ্রাম শুরু করার জন্য বলছে।

কিছু atএবং chronভিত্তিক উত্তর রয়েছে, তবে কঠোর পাঠ্য সহ, atdএবং anacronপরিপূরক প্রোগ্রামগুলি যা সর্বদা চলমান থাকে, সুতরাং তারা অযোগ্য ঘোষণা হতে পারে।

একটি সম্পর্কিত অ্যাপ্রোচ, তবে লিনাক্সটি ব্যবহার করা একটু নিম্ন স্তরের init। রুট হিসাবে, এই .conf ফাইলটি এতে যুক্ত করুন /etc/init/:

বর্ণনা "চিরকাল"

রানলেভেল থেকে শুরু করুন [2345]
রানলেভলে থামুন [! 2345]

respawn

নির্বাহী ঘুম 10

তারপরে initএর .conf ফাইলগুলি পুনরায় পড়ুন:

sudo telinit 5

এটি একটি sleepপ্রক্রিয়া শুরু করবে যা 10 সেকেন্ডের জন্য লাইভ করবে, তারপরে প্রস্থান করবে। initএরপরে sleepযখন পূর্ববর্তীটি চলে গেছে তখন এটি একবার শনাক্ত করবে।

অবশ্যই এটি এখনও initপরিপূরক প্রোগ্রাম হিসাবে ব্যবহার করছে । আপনি তর্ক করতে পারেন যে initকার্নেলের একটি লজিকাল এক্সটেনশন এবং সর্বদা যে কোনও লিনাক্সে উপলব্ধ থাকবে ।

যদি এটি গ্রহণযোগ্য না হয় তবে আমি অনুমান করি যে পরবর্তী নিম্ন-স্তরের কাজটি হ'ল একটি কার্নেল মডিউল তৈরি করা হবে যা ব্যবহারকারীক্ষেত্রের প্রক্রিয়াটি প্রত্যাহার করে (এটি কতটা সহজ তা নিশ্চিত নয়)। এখানে এটি যুক্তিযুক্ত হতে পারে যে কার্নেলটি কোনও প্রক্রিয়া নয় এবং সুতরাং কোনও প্রোগ্রাম (পরিপূরক) নয়। অন্যদিকে, কার্নেলটি সিপিইউর দিক থেকে নিজস্ব ডানদিকে একটি প্রোগ্রাম।


-1

টিআই-বেসিক: 5 টি অক্ষর

ডাকা prgmA

:prgmA

আমি 6 টি অক্ষর গণনা করতে পারি। টিআই-বেসিক প্রোগ্রামের আকার গণনা করার জন্য কি বিশেষ কিছু আছে?
পেস্টবিন ডট কম 0mr8spkT

:যখনই আপনি TI তৈরি-মৌলিক প্রয়োগ প্রোগ্রামিং করছি লাইন প্রতীকের মাত্র শুরু। এটি আপনার টাইপ করা জিনিস নয়, এটি কেবল সম্পাদকটিতে রয়েছে।
scrblnrd3

আমি দেখছি, তথ্যের জন্য ধন্যবাদ
পেস্টবিন ডট কম 0 এমআর

এটি কি পুনরাবৃত্তির অনুরোধ নয়? Aবেস কেস হিসাবে এর মান বাড়ানোর চেষ্টা করুন এবং ব্যবহার করার চেষ্টা করুন , আপনি শেষ পর্যন্ত এটিকে বাইরে বেরিয়ে আসতে দেখবেন।
ζ--

ওয়েল সমস্ত ভেরিয়েবলগুলি টি-বেসিক ক্ষেত্রে গ্লোবাল, তাই আমি নিশ্চিত নই। এটি হতে পারে
scrblnrd3
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.