spawn_link
ist eine Funktion, und die Aufrufe verhalten sich wie normale Funktionsaufrufe: zuerst werden die Argumente ausgewertet, und dann wird die Funktion mit den ausgewerteten Argumenten aufgerufen.
So in dem ersten Beispiel, das Argument zu spawn_link
ist:
exit(fun()-> myfun() end)
exit
, wenn sie mit einem Argument aufgerufen, den aktuellen Prozess-Exit macht, das Argument als Austrittsgrund verwenden. In diesem Fall stürzt der Prozess ab, bevor er die Möglichkeit hat, spawn_link
aufzurufen, und erstellt nie einen neuen Prozess. (.. Der Ausgang Grund des aktuellen Prozesses wird ein fun
sein, was sehr ungewöhnlich ist, aber erlaubte die fun
nicht genannt werden)
Im zweiten Beispiel, das Argument zu spawn_link
ist:
fun()->exit(myfun()) end
Das ist ein fun
. Die Ausdrücke darin werden erst ausgewertet, wenn die Funktion aufgerufen wird. Daher übergeben wir diese Funktion an spawn_link
, was einen neuen Prozess hervorruft, der diese Funktion ausführt. Der neu erzeugte Prozess ruft myfun
auf und wird dann mit dem Rückgabewert myfun
als Ausgangsgrund beendet.